2016-09-22 5 views
0

может кто-нибудь помочь мне с этим, я действительно изо всех сил, чтобы решить, как исправить эту ошибку:C#: Invalid Cast Исключение

public class ModDataGridView : DataGridView 
    { 
    } 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     ModDataGridView dgv2 = new ModDataGridView(); 
     pnl.Controls.Add(dgv2); //pnl is a Panel type 
     foreach (ModDataGridView item in pnl.Controls) 
     { 
      txt.AppendText(item.GetType().ToString()); 
     } 

    } 
} 

необработанное исключение типа

'System.InvalidCastException' occurred in Test.exe

Additional information: Unable to cast object of type 'System.Windows.Forms.DataGridView' to type 'Test.ModDataGridView'.

+0

что тип 'pnl.Controls'? – Mostafiz

+1

Является ли ошибка в foreach (элемент ModDataGridView в pnl.Controls)? –

+0

это просто панель .... добавит к вопросу! –

ответ

0

использования Тип Anonymouse var

foreach (var item in pnl.Controls) 
    { 
     if(item.GetType() == typeof(ModDataGridView)) 
     { 
      txt.AppendText(item.GetType().ToString()); 
     } 
    } 
+0

спасибо, что работает (с точки зрения не получения ошибки), но проблема, которую я опубликовал выше, является уменьшенной проблемой из моего оригинала. я специально хочу, чтобы каждый объект типа ModDataGridView и запускал на нем некоторый код, вышесказанное просто найдет объекты любого типа! –

+0

ok I ma update code – Mostafiz

+0

см. Обновление надеюсь эта помощь – Mostafiz

1

вы уверены, что хотите только добавить ModDataGridView?

Вы можете сделать использование OfType<>()

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     ModDataGridView dgv2 = new ModDataGridView(); 
     pnl.Controls.Add(dgv2); //pnl is a Panel type 
     foreach (ModDataGridView item in pnl.Controls.OfType<ModDataGridView>()) 
     { 
      txt.AppendText(item.GetType().ToString()); 
     } 

    } 
} 

Если вы хотите, чтобы все элементы управления, используйте базовый класс:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     ModDataGridView dgv2 = new ModDataGridView(); 
     pnl.Controls.Add(dgv2); //pnl is a Panel type 
     foreach (Control item in pnl.Controls) 
     { 
      txt.AppendText(item.GetType().ToString()); 
     } 

    } 
} 
+0

блестящий, спасибо –

Смежные вопросы