我在这里使用c#.net。
combobox1
包含从1到无限制的数字,例如n,如果combobox1.text == 1
,则显示textbox1
和textbox2
,combobx1.text == 2
然后{{ 1}}到textbox1
,textbox4
然后combobox1.text==n
到textbox1
出现。
如何设置要动态添加的textbox2*n
个对象?我的combobox1中的项目限制为8,这意味着我只有16个文本框。如果我想文本框的数量是n,则无限制。
例如在控制台中。
textbox
类似的东西,但在Windows窗体中。
我正在学习制作回归插值程序,所以我需要x和y。这就是为什么如果console.read("Input n : ");
int n = convert.toint16(console.readline());//100
double[] x = new double[n];
double[] y= new double[y];
for(int i = 0;i<n;i++){
x[i]=convert.todouble(console.readline());
y[i]=convert.todouble(console.readline());
}
那么2个文本框应该可见
答案 0 :(得分:2)
像这样:
1
答案 1 :(得分:0)
我的看法如下:
Tag
,其中包含所有允许的值“1 3 4 5”等。注意空格!yourControl.Visible = yourControl.Tag.ToString.Contains(value.ToString(" #0 "));
一个块全部,一个Tag
来维持每个控件。
请注意,每个Tag
可以包含多个值,每个值都可以是多个Tags
的一部分!
对于更复杂的操作,包括动态更改需求,您仍然可以创建List<Control>
并循环它们。
请注意,虽然你的问题暗示了所选值与文本框之间的某种上升关系,但我没有使用它,因为它是偶然的和不稳定的。相反,我将关注点分开并将可见性组存储在每个控件的标签中。这是可见的,易于维护,而且检查速度非常快。
为了避免阻止,您仍然可以将所有参与的控件添加到List<Control>
并循环显示:
List<Control> allBoxes = null ;
public Form1()
{
InitializeComponent();
allBoxes = new List<Control>() { textBox1, textBox2, label1..};
foreach (Control ctl in allBoxes) ctl.Tag = ""; // initialize..
textBox1.Tag = " 1 2 3 4 5 6 8 9 10 "
textBox2.Tag = " 3 4 5 6 8 9 10 "
textBox3.Tag = " 5 6 8 9 10 "
textBoxXYZ.Tag = " 1 3 7 5 10 "
}
void SetVisibility(int value)
{
foreach (Control ctl in allBoxes)
ctl.Visible = ctl.Tag.ToString().Contains(value.ToString(" #0 "));
}
答案 2 :(得分:0)
如果您不打算限制可添加的文本框数量,则应通过实际创建新文本框来处理组合框的选定索引更改事件,并设置其位置(左侧和顶部),并将它们添加到窗体的控件属性中。您还可以通过实际从表单中删除文本框并处理它们来处理文本框,而不是让它们不可见。
您还希望将它们放在带有垂直滚动条的面板中,而不是将它们放在表单上,这样您就不会用完空间。
您可以使用List类的数组或实例来跟踪文本框。
答案 3 :(得分:0)
您可以添加这样的枚举
public enum StyleVisibleOfControls{Style1,Style2,Style3}
并像这样使用
public StyleVisibleOfControls Style
{
set{
// you can use switch too
if ( value ==StyleVisibleOfControls.Style1 )
{
label1.Visible = true;
label2.Visible = true;
textBox1.Visible = true;
textBox2.Visible = true;
textBox3.Visible = true;
textBox4.Visible = true;
}
else if (value ==StyleVisibleOfControls.Style2){
label1.Visible = true;
label2.Visible = true;
textBox1.Visible = true;
textBox2.Visible = true;
textBox3.Visible = true;
}
}
}
您也可以在扩展组合框中执行此操作
if (comboBox1.Text == "2"){
Style = StyleVisibleOfControls.Style1;
}
else if (comboBox1.Text == "3"){
Style = StyleVisibleOfControls.Style2;
}
答案 4 :(得分:-1)
为要显示的控件的标记赋值(为组合为1时应显示的控件指定1等),并在combobox_selectedIndexChange中指定:
var val = int.Parse(comboBox1.SelectedItem.ToString());
var cs = Controls.Cast<Control>().Where(c => c.Tag != null && int.Parse(c.Tag.ToString()) <= val).Select(c => { c.Visible = true; return c; }).ToList();
答案 5 :(得分:-1)
您还可以将容器内的控件分组,并将容器可见性初始化为false:
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
然后你可以这样做:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedItem == "2")
{
panel1.Visible = true;
}
if (comboBox1.SelectedItem == "3")
{
panel1.Visible = true;
panel2.Visible = true;
}
if (comboBox1.SelectedItem == "4")
{
panel1.Visible = true;
panel2.Visible = true;
panel3.Visible = true;
}
}
这与您已有的类似,但您可以将多个控件组合在容器内并一次显示所有控件。