簡體   English   中英

C#:無效的強制轉換異常

[英]c#: Invalid Cast Exception

任何人都可以幫我解決這個問題,我真的在努力找出如何糾正此錯誤:

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());
        }

    }
}

類型的未處理異常

Test.exe中發生了'System.InvalidCastException'

附加信息:無法將類型為“ System.Windows.Forms.DataGridView”的對象轉換為類型為“ Test.ModDataGridView”。

確定要只添加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());
        }

    }
}

使用匿名類型var

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM