1

パネルと、パネルとツリービューに追加された 2 つの LinkLabels があります。

panel_Paint イベントで、リンクラベルの色が白になり、ツリービューの背景色が黒になるようにします。どうすればいいですか?

以下のコードは、パネルにツリービューがない場合にのみ機能しますが、パネルにもツリービューを追加すると、次のように表示されます:

タイプ 'System.Windows.Forms.TreeView' のオブジェクトをタイプ 'System.Windows.Forms.LinkLabel' にキャストできません。

foreach (LinkLabel link in panel1.Controls)
{         
    link.LinkColor = Color.White; 
}
4

3 に答える 3

3

パネルにはすべてのコントロールが含まれています。そのうちの 1 つはTreeViewにキャストできないLinkLabelです。ループでは、次のようにコントロールのタイプを確認する必要があります。

foreach (Control control in panel1.Controls)
{
   if (control is LinkLabel)
   {
       ... set link color
   }
   else if (control is TreeView)
   {
       ... set background
   }
}

LinkLabelまたは、 1 つしかTreeViewない場合は、ループは必要ありません。名前でアクセスするだけです。panel1

于 2011-03-22T09:12:53.197 に答える
2

panel1 のすべてのコントロールを LinkLabel にキャストしようとしたため、エラーが発生しました。このようなことを試す必要があります

foreach (Control control in panel1.Controls)
{
       if (control.GetType() == typeof(LinkLabel))
       {
            LinkLabel link = (LinkLabel)control;
            link.LinkColor = Color.White; 
       } 
}

お役に立てれば。

編集:メソッドがあることは知っていましたが、名前または構文の100%はわかりませんでした。以下の改善された回答を参照してください。

foreach (LinkLabel link in panel1.Controls.OfType<LinkLabel>())
{
    link.LinkColor = Color.White;
}

これがあなたにとってより良いことを願っています。

于 2011-03-22T09:15:27.743 に答える
2

これを試して:

foreach (Control ctrl in panel1.Controls)
{
     LinkLabel link = ctrl as LinkLabel;
     if(link != null)
        link.LinkColor = Color.White; 
}
于 2011-03-22T09:12:31.317 に答える