0

也许这个问题对某些人来说很容易,但它困扰着我。

我正在寻找的行为是: - 当我选择一个菜单项时,会出现一个对话框;- 进行对话框选择后,根据所做的选择呈现一个新表单

这是代码:

        this.panel1.Controls.Clear();
        if (this.childForm != null)
        {
            this.childForm.Dispose();
            this.childForm = null;
        }

        using (var selectionForm = new SelectTransaction())
        {
            var result = selectionForm.ShowDialog();
            childForm = new TransactionForm(selectionForm.transactionName);
            childForm.TopLevel = false;
            this.panel1.Controls.Add(childForm);
            childForm.Location = new Point(0, 0);
            childForm.Show();
        }  

一般来说,代码可以按我的意愿工作。但有时,主要是在连续两次进行选择时,ShowDialog()不等待我的输入。它会显示表格。

我尝试自己创建和处置选择对象(而不是使用using),但出现了同样的问题。

对话结果在SelectTransaction表单中设置。在那里我有一个combobox,当我选择一个项目时,我返回结果。

public partial class SelectTransaction : Form
{
    public string transactionName;

    public SelectTransaction()
    {
        InitializeComponent();

        // The data set is retrieving from a database

        selectTransactionComboBox.Text = " - SELECT TRANSACTION - ";
        selectTransactionComboBox.Items.Clear();
        for (int i = 0; i < dataSet.Tables["TransactionInfo"].Rows.Count; i++)
        {      
            selectTransactionComboBox.Items.Add(dataSet.Tables["TransactionInfo"].Rows[i].ItemArray.GetValue(0).ToString());
         }  
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.transactionName = selectTransactionComboBox.Items[selectTransactionComboBox.SelectedIndex].ToString();
        this.Close();
    }
}

有人可以告诉我我做错了什么吗?

4

1 回答 1

1

有时 SelectedIndexChanged-Event 会在您填充组合框时触发。而是使用 SelectionChangeCommitted-Event http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectionchangecommitted.aspx

或另一种解决方案:不要在表单中添加事件侦听器,只需在填充组合框后添加它(在完成 For-Loop 之后)

selectTransactionComboBox.SelectedIndexChanged += comboBox1_SelectedIndexChanged
于 2013-09-17T13:20:55.007 回答