我正在用C# Winforms设计一个应用程序(这是第一次)。过去,我在C++中设计了几个应用程序,并且很难将我的一些C++-CLI函数转换为C#。
我有5个按钮沿边栏,以切换按钮的可见性,相应的面板,每个按钮点击。为了做到这一点,我将所有其他面板的可见性设置为false。为了在C++-CLI中实现这一点,我做了以下工作:
private: System::Void panels_Click(System::Object^ sender, System::EventArgs^ e) {
System::Windows::Forms::Button ^ currentbutton = (System::Windows::Forms::Button ^) sender;
array < Panel ^ > ^ objects = { panel1, panel2, panel3, panel4, panel5, panel6};
array < Button ^ > ^ buttons = { button1, button2, button3, button4, button5, button6 };
for (int i = 0; i < 6; i++) {
if (buttons[i]->Equals(currentbutton)) {
objects[i]->Visible = true;
}
else objects[i]->Visible = false;
}
}我遇到的问题是“数组面板^”部分,因为我在C#中找不到相应的部分。任何帮助都是非常感谢的。
发布于 2017-11-14 23:26:42
数组在C#中使用TypeName[]声明。
Panel[] objects = { panel1, panel2, panel3, panel4, panel5, panel6 };
Button[] buttons = { button1, button2, button3, button4, button5, button6 };发布于 2017-11-14 23:23:34
可以将Controls集合强制转换为List<Control>,然后访问控件名称以进行比较。Cast<T>()方法是linq扩展方法,因此您必须将using System.Linq;添加到您的命名空间中:
private void panels_Click(object sender, EventArgs e)
{
List<string> panelNames = new List<string>
{"panel1", "panel2", "panel3", "panel4", "panel5", "panel6"};
List<string> buttonNames = new List<string>
{"button1", "button2", "button3", "button4", "button5", "button6"};
List<Control> panels = this.Controls.Cast<Control>()
.Where(ctrl => panelNames.Contains(ctrl.Name)).ToList();
List<Control> buttons = this.Controls.Cast<Control>()
.Where(ctrl => buttonNames.Contains(ctrl.Name)).ToList();
Button thisButton = sender as Button;
for (int i = 0; i < buttons.Count; i++)
{
if (i < panels.Count) panels[i].Visible = buttons[i] == thisButton;
}
}https://stackoverflow.com/questions/47296775
复制相似问题