1

2 つのデータバインドされたリストボックスと 2 つのデータバインドされたコンボボックスを含むフォームがあります。型指定されたデータセットを使用しています。コントロールは、次のスキーマとこのスキーマのデータを持つテーブルのペアにバインドされます。1listboxつと 1 つがテーブルcomboBoxにバインドされます。barもう一方はテーブルlistboxcomboBoxバインドされfooます。

foo に対して SelectedIndexChanged イベントが発生するlistBoxと、バーlistBoxcomboBox.

ただし、foo を使用してイベント内 comboBoxにアクセスしようとすると、新しい値ではなく、以前に選択した値が取得されます。は現在の値を教えてくれます。barComboBox.SelectedTextFooComboBox_SelectedIndexChangedSelectedTextBarListBox.Selected

を使用して選択を行うことに注意してくださいFooListBox。両方のイベント ハンドラーが期待どおりに機能します。

ここで何が起こっているのか、これを回避する方法を誰かが説明できますか?

フォームのスクリーンショットとサンプル データ:

ここに画像の説明を入力

データセット デザイナー:

ここに画像の説明を入力

form1.cs コード:

//Standard using statements and namespace info

    public partial class Form1 : Form
    {
        //Loading DataSets and initializing here

        private void FooListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Console.WriteLine("The value in the bar ListBox is {0}", barListBox.Text);
        }

        private void FooComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Console.WriteLine("The value in the bar comboBox is {0}", barComboBox.Text);
        }
    }
4

1 に答える 1

0

あなたが説明したように、私は何の行動も見つけられませんでした。

このコードを確認してください。再現されたコードが間違っているので修正してください。

Combo Box アイテムを使用しました。ListBox アイテムは FormLoad にいくつかの webServiceMethod からの DataSource として追加されます。

Form1.Designer.cs で

this.comboBox1 = new System.Windows.Forms.ComboBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // comboBox1
            // 
            this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.comboBox1.FormattingEnabled = true;
            this.comboBox1.Location = new System.Drawing.Point(32, 55);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Size = new System.Drawing.Size(188, 21);
            this.comboBox1.TabIndex = 0;
            this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
            // 
            // listBox1
            // 
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(261, 55);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(255, 95);
            this.listBox1.TabIndex = 1;
            this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);

* Form1.cs 内*

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       MessageBox.Show("The value in the bar comboBox is "+ comboBox1.Text);
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("The value in the bar comboBox is "+ listBox1.Text);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        WebServiceRef.CM_ServiceSoapClient soapClient = new WebServiceRef.CM_ServiceSoapClient();

        comboBox1.DataSource = soapClient.GetAllCategories();

        listBox1.DataSource = soapClient.GetAllCategories();
    }

DataSource フォーム WebService Method に従ってデータを変更しましたが、動作を説明したため、問題は見つかりませんでした。

于 2013-02-13T05:49:20.713 に答える