[英]Is there a way to access control properties within custom user control from Designer using c# (Windows Forms)
[英]C# Unable to loop through control collection and set properties on a user control in Windows Forms
嗨,我有一個Forms應用程序,該應用程序使用基於稱為colorSlider的跟蹤欄的自定義控件。 此控件是從代碼項目中獲得的,並已添加到VS2017中的工具中。 控制的各個方面都工作正常。 我可以根據需要更改任何屬性。 但是,最終項目非常大,所有軌跡欄(大約50個)將被此自定義控件替換。 我還希望能夠使用用戶自定義外觀來修改滑塊的外觀。 因此,這是更改滑塊上按鈕的典型命令。
colorSlider1.ThumbInnerColor = Color.FromArgb(99, 130, 208);
這工作得很好。 但是我想循環執行此操作。 所有控件都在稱為后面板的面板上。 這是更改按鈕的原色的示例:
foreach (Panel pnl in backPanel.Controls)
{
foreach (Control c in pnl.Controls)
{
if (c is Button)
{
c.ForeColor = Color.Black;
}
}
}
這很好。 但是,如果我嘗試這樣做:
foreach (Panel pnl in backPanel.Controls)
{
foreach (Control c in pnl.Controls)
{
if (c is ColorSlider.ColorSlider)
{
c.ThumbInnerColor = Color.FromArgb(99, 130, 208);
}
}
}
在這種情況下,Visual Studio會給出語法錯誤
錯誤CS1061“控件”不包含“ ThumbInnerColor”的定義,並且找不到可以接受的擴展方法“ ThumbInnerColor”接受“ Control”類型的第一個參數(是否缺少using指令或程序集引用?)
因此,有人對如何解決此問題有想法嗎? 謝謝
看看錯誤。“ 控件”不包含“ ThumbInnerColor”的定義,這是正確的。. 控件不包含該屬性。 現在看一下您的代碼:
c.ThumbInnerColor = Color.FromArgb(99, 130, 208);
您正在嘗試在控件類型為Object的對象上設置該屬性,該屬性屬於ColorSlider類型的特定控件。
該修復應與將控件投射到ColorSlider一樣簡單
foreach (Panel pnl in backPanel.Controls)
{
foreach (Control c in pnl.Controls)
{
ColorSlider.ColorSlider slider = c as ColorSlider.ColorSlider;
if (slider != null)
{
slider.ThumbInnerColor = Color.FromArgb(99, 130, 208);
}
}
}
要么
foreach (Panel pnl in backPanel.Controls)
{
foreach (Control c in pnl.Controls)
{
if (c is ColorSlider.ColorSlider)
{
(c as ColorSlider.ColorSlider).ThumbInnerColor = Color.FromArgb(99, 130, 208);
}
}
}
要么
foreach (Panel pnl in backPanel.Controls)
{
foreach (Control c in pnl.Controls)
{
if (c is ColorSlider.ColorSlider)
{
((ColorSlider.ColorSlider)c).ThumbInnerColor = Color.FromArgb(99, 130, 208);
}
}
}
或更新的C#
foreach (Panel pnl in backPanel.Controls)
{
foreach (Control c in pnl.Controls)
{
if (c is ColorSlider.ColorSlider s)
{
s.ThumbInnerColor = Color.FromArgb(99, 130, 208);
}
}
}
您還可以使用Controls.OfType <>選項:
foreach(Panel pnl in backPanel.Controls.OfType<Panel>())
{
foreach(ColorSlider cs in pnl.Controls.OfType<ColorSlider>())
{
cs.ThumbInnerColor = Color.FromArgb(99, 130, 208);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.