我有一个page
,用户可以在其中选择他们想要的配件,然后我希望下一个表单中有一个textbox
,其中列出了用户选中的所有Checkboxes
在以前的表格中,这可能吗?
我使用以下代码
检查了一个Checkbox
在表格1上,
public static string Cheese = "";
if (CheeseTick.Checked)
{
Cheese = "1 x Extra Cheese";
}
表格2,
ToppingSummary.Text = Form1.Cheese
答案 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);
}
}