是否可以列出在文本框中选中的复选框

时间:2016-05-20 12:02:17

标签: c#

我有一个page,用户可以在其中选择他们想要的配件,然后我希望下一个表单中有一个textbox,其中列出了用户选中的所有Checkboxes在以前的表格中,这可能吗?

我使用以下代码

检查了一个Checkbox

在表格1上,

public static string Cheese = "";

 if (CheeseTick.Checked)
        {
            Cheese = "1 x Extra Cheese";
        }

表格2,

ToppingSummary.Text = Form1.Cheese

2 个答案:

答案 0 :(得分:0)

好吧,您似乎必须设置所有Control s并过滤掉CheckBox感兴趣的内容:

   public class Form1 {
     ...
     public static IEnumerable<Control> AllControls(Control control) {
      var controls = control.Controls
        .OfType<Control>();

      return controls
        .SelectMany(ctrl => AllControls(ctrl))
        .Concat(controls);
     }

     public String AllToppings {
       get {
         var source = AllControls(this) 
           .OfType<CheckBox>()
           .Where(checkbox => checkbox.Checked)
           //TODO: put other conditions on checkbox here, e.g. 
           //.Where(checkbox => checkbox.Name.Contains("Tick")) 
           .Select(checkbox => checkbox.Text); 

         return String.Join(" ", source);
       }  
     } 
     ...

   }

Form2

   Form1 form = Application.OpenForms
     .OfType<Form1>()
     .LastOrDefault();

   if (form != null)
     ToppingSummary.Text = form.AllToppings;

答案 1 :(得分:-1)

执行此操作的正确方法是MVVM,即表单上有一个对象,其值在表单上设置,然后在第二个表单上拾取该更改,因为它内部具有相同的对象< / p>

public class FoodOrder
{
    public List<String> SpecialInstructions{get;set;}
    public void AddSpecialInstruction(string instruction)
    {
        SpecialInstructions.Add(instruction);
        SpecialInstructionsChanged?.Invoke(this,EventArgs.Empty);
    }
    public event EventHandler SpecialInstructionsChanged;
}

然后在表单一中CheeseTick.CheckedChanged事件调用AddSpecialInstruction或RemoveSpecialInstruction,形成两个侦听SpecialInstructionsChanged并根据需要更新

public class Form1
{
    public FoodOrder Order {get;set}
}

public class Form2
{
    public FoodOrder Order {get;set}
}

然后你执行form2.Order = Form1.Order只需确保在发送订单相等后为事件添加一个监听器

如果您希望自动化复选框,则可以遍历指定控件中的所有复选框

foreach(Checkbox c in Control.Controls)
{
    c.CheckedChanged += (s,e)=>
    {
        var cb = s as Checkbox;
        if(cb.Checked)
            Order.AddSpecialInstruction(cb.Text);
        else
            Order.RemoveSpecialInstruction(cb.Text);
    }
}