C# WinForms Select 在 ComboBox_ColumnSchedule 然后打开 ComboBox_BeamSchedule
C# WinForms Select in ComboBox_ColumnSchedule then open the ComboBox_BeamSchedule
对不起 Guyz,但我会 post 在这里提供我的查询的相关代码:
private void InitializeComboBox(ComboBox ComboBoxX)
{
ComboBoxX.Size = new Size(Spacing, Spacing);
ComboBoxX.BackColor = this.BackColor;
ComboBoxX.DropDownStyle = ComboBoxStyle.DropDownList;
ComboBoxX.Visible = false;
ComboBoxX.Font = new Font("Arial Narrow", 12);
Controls.Add(ComboBoxX);
}
private void ColumnInformation()
{
int i;
for (i = 1; i <= NumberOfColumnLabel; i++)
{
ComboBox_ColumnType[i] = new ComboBox();
InitializeComboBox(ComboBox_ColumnType[i]);
ComboBox_ColumnType[i].Width = Label_Type.Width;
ComboBox_ColumnType[i].Visible = true;
ComboBox_ColumnType[i].Items.Add("A");
ComboBox_ColumnType[i].Items.Add("B");
ComboBox_ColumnType[i].Items.Add("C");
ComboBox_ColumnType[i].Items.Add("D");
ComboBox_ColumnType[i].Items.Add("E");
ComboBox_ColumnType[i].Location = new Point(Label_Type.Location.X, Label_ColumnScheduleFirst[i].Location.Y);
ComboBox_ColumnMirror[i] = new ComboBox();
InitializeComboBox(ComboBox_ColumnMirror[i]);
ComboBox_ColumnMirror[i].Width = Label_Type.Width;
ComboBox_ColumnMirror[i].Visible = false;
ComboBox_ColumnMirror[i].Location = new Point(Label_Mirror.Location.X, Label_ColumnScheduleFirst[i].Location.Y);
}
OpeningMirror();
}
private void OpeningMirror()
{
int i;
int j;
for (i = 1; i <= NumberOfColumnLabel; i++)
{
ComboBox_ColumnMirror[i].Items.Clear();
ComboBox_ColumnMirror[i].Visible = false;
ComboBox_ColumnType[i].SelectedIndexChanged += (sender, args) =>
{
if (ComboBox_ColumnType[i].SelectedItem == "D")
{
ComboBox_ColumnMirror[i].Visible = true;
for (j = 1; j <= 6; j++)
{
ComboBox_ColumnMirror[i].Items.Add(j);
}
}
else if (ComboBox_ColumnType[i].SelectedItem == "E")
{
ComboBox_ColumnMirror[i].Visible = true;
for (j = 1; j <= 2; j++)
{
ComboBox_ColumnMirror[i].Items.Add(j);
}
}
else
{
ComboBox_ColumnMirror[i].Visible = false;
}
};
}
}
if item "D" or Item "E" selected, related combobox will open, esp. Combobox_mirror 和 visibility=true,但如果用户改变主意并且 select 项目 "A" 或 "B" 或 "C",则不会出现组合框保持隐藏,这是事件的同步。
使用 ComboBox.SelectedIndexChanged 对组合框上的更改做出反应。将 id 添加到您生成的组合框以在事件处理程序中识别它。
然后您可以根据 id 决定是否显示另一个组合框。
ComboBox_ColumnSchedule[i] = new ComboBox();
ComboBox_ColumnSchedule[i].Id = "Cbx_" + id;
ComboBox_ColumnSchedule[i].SelectedIndexChanged += ComboBox_SelectedIndexChanged;
...
private void ComboBox_SelectedIndexChanged(object sender,
System.EventArgs e)
{
ComboBox comboBox = (ComboBox) sender;
//replace with your criteria
ComboBox_BeamSchedule.Visible = comboBox.Id == "Cbx_2";
...
}
试试这个(我不知道你实际有什么布局,但这可以作为工作的模板):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
ComboBoxPair pair = new ComboBoxPair(i*20);
InitializeComboBoxPair(pair);
}
}
private void InitializeComboBoxPair(ComboBoxPair comboBoxPair)
{
Controls.Add(comboBoxPair.ColumnSchedule);
Controls.Add(comboBoxPair.BeamSchedule);
}
}
public class ComboBoxPair
{
public ComboBox ColumnSchedule { get; private set; }
public ComboBox BeamSchedule { get; private set; }
public ComboBoxPair(int top)
{
ColumnSchedule = new ComboBox();
ColumnSchedule.Top = top;
ColumnSchedule.Items.AddRange("ABCDE".Cast<object>().ToArray());
ColumnSchedule.SelectedIndexChanged += ColumnSchedule_SelectedIndexChanged;
BeamSchedule = new ComboBox();
BeamSchedule.Top = top;
BeamSchedule.Items.AddRange("ABCDE".Select(c => string.Format("{0}{0}",c)).ToArray());
BeamSchedule.Left = ColumnSchedule.Right;
BeamSchedule.Visible = false;
}
private void ColumnSchedule_SelectedIndexChanged(object sender, EventArgs e)
{
BeamSchedule.Visible = ColumnSchedule.SelectedIndex > -1;
}
}
对不起 Guyz,但我会 post 在这里提供我的查询的相关代码:
private void InitializeComboBox(ComboBox ComboBoxX)
{
ComboBoxX.Size = new Size(Spacing, Spacing);
ComboBoxX.BackColor = this.BackColor;
ComboBoxX.DropDownStyle = ComboBoxStyle.DropDownList;
ComboBoxX.Visible = false;
ComboBoxX.Font = new Font("Arial Narrow", 12);
Controls.Add(ComboBoxX);
}
private void ColumnInformation()
{
int i;
for (i = 1; i <= NumberOfColumnLabel; i++)
{
ComboBox_ColumnType[i] = new ComboBox();
InitializeComboBox(ComboBox_ColumnType[i]);
ComboBox_ColumnType[i].Width = Label_Type.Width;
ComboBox_ColumnType[i].Visible = true;
ComboBox_ColumnType[i].Items.Add("A");
ComboBox_ColumnType[i].Items.Add("B");
ComboBox_ColumnType[i].Items.Add("C");
ComboBox_ColumnType[i].Items.Add("D");
ComboBox_ColumnType[i].Items.Add("E");
ComboBox_ColumnType[i].Location = new Point(Label_Type.Location.X, Label_ColumnScheduleFirst[i].Location.Y);
ComboBox_ColumnMirror[i] = new ComboBox();
InitializeComboBox(ComboBox_ColumnMirror[i]);
ComboBox_ColumnMirror[i].Width = Label_Type.Width;
ComboBox_ColumnMirror[i].Visible = false;
ComboBox_ColumnMirror[i].Location = new Point(Label_Mirror.Location.X, Label_ColumnScheduleFirst[i].Location.Y);
}
OpeningMirror();
}
private void OpeningMirror()
{
int i;
int j;
for (i = 1; i <= NumberOfColumnLabel; i++)
{
ComboBox_ColumnMirror[i].Items.Clear();
ComboBox_ColumnMirror[i].Visible = false;
ComboBox_ColumnType[i].SelectedIndexChanged += (sender, args) =>
{
if (ComboBox_ColumnType[i].SelectedItem == "D")
{
ComboBox_ColumnMirror[i].Visible = true;
for (j = 1; j <= 6; j++)
{
ComboBox_ColumnMirror[i].Items.Add(j);
}
}
else if (ComboBox_ColumnType[i].SelectedItem == "E")
{
ComboBox_ColumnMirror[i].Visible = true;
for (j = 1; j <= 2; j++)
{
ComboBox_ColumnMirror[i].Items.Add(j);
}
}
else
{
ComboBox_ColumnMirror[i].Visible = false;
}
};
}
}
if item "D" or Item "E" selected, related combobox will open, esp. Combobox_mirror 和 visibility=true,但如果用户改变主意并且 select 项目 "A" 或 "B" 或 "C",则不会出现组合框保持隐藏,这是事件的同步。
使用 ComboBox.SelectedIndexChanged 对组合框上的更改做出反应。将 id 添加到您生成的组合框以在事件处理程序中识别它。
然后您可以根据 id 决定是否显示另一个组合框。
ComboBox_ColumnSchedule[i] = new ComboBox();
ComboBox_ColumnSchedule[i].Id = "Cbx_" + id;
ComboBox_ColumnSchedule[i].SelectedIndexChanged += ComboBox_SelectedIndexChanged;
...
private void ComboBox_SelectedIndexChanged(object sender,
System.EventArgs e)
{
ComboBox comboBox = (ComboBox) sender;
//replace with your criteria
ComboBox_BeamSchedule.Visible = comboBox.Id == "Cbx_2";
...
}
试试这个(我不知道你实际有什么布局,但这可以作为工作的模板):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
ComboBoxPair pair = new ComboBoxPair(i*20);
InitializeComboBoxPair(pair);
}
}
private void InitializeComboBoxPair(ComboBoxPair comboBoxPair)
{
Controls.Add(comboBoxPair.ColumnSchedule);
Controls.Add(comboBoxPair.BeamSchedule);
}
}
public class ComboBoxPair
{
public ComboBox ColumnSchedule { get; private set; }
public ComboBox BeamSchedule { get; private set; }
public ComboBoxPair(int top)
{
ColumnSchedule = new ComboBox();
ColumnSchedule.Top = top;
ColumnSchedule.Items.AddRange("ABCDE".Cast<object>().ToArray());
ColumnSchedule.SelectedIndexChanged += ColumnSchedule_SelectedIndexChanged;
BeamSchedule = new ComboBox();
BeamSchedule.Top = top;
BeamSchedule.Items.AddRange("ABCDE".Select(c => string.Format("{0}{0}",c)).ToArray());
BeamSchedule.Left = ColumnSchedule.Right;
BeamSchedule.Visible = false;
}
private void ColumnSchedule_SelectedIndexChanged(object sender, EventArgs e)
{
BeamSchedule.Visible = ColumnSchedule.SelectedIndex > -1;
}
}