0

TCP からパケットを受信する ac# アプリケーションがあり、パケットの解析中に datagridview にボタン列を作成します。ボタンのテキストは、受信したデータに従って変更する必要があります。つまり、'0' を受信した場合、その行のボタン テキストは 'STOP' である必要があり、'1' を受信した場合、その行のボタン テキストは ' である必要があります。始める'。常に倍数の行があります。Datagridview のデータ ソースは 10 秒ごとに更新されます。

 if (port_dict[kvp.Key] == "0")
{
           PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
           PORT_BUTTON_DICT[kvp.Key].Text = "START";
           this.Invoke(new Action(() =>datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly=false));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].Value = PORT_BUTTON_DICT[kvp.Key]));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly = true));
           this.Invoke(new Action(() => datagridPM.Rows[row_count].Cells[datagridPM.Columns.Count - 1].Value = PORT_BUTTON_DICT[kvp.Key].Text));

 }

 else
 {
           PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
           PORT_BUTTON_DICT[kvp.Key].Text = "STOP";
           this.Invoke(new Action(() =>datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly=false));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].Value = PORT_BUTTON_DICT[kvp.Key]));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly = true));
           this.Invoke(new Action(() => datagridPM.Rows[row_count].Cells[datagridPM.Columns.Count - 1].Value = PORT_BUTTON_DICT[kvp.Key].Text));
 }

私が直面しているのは、いずれかが変更された場合にすべてのボタンのテキストが変更されるたびです。すべての行ではなく、値が変更された行のボタンテキストのみを変更したい。

4

1 に答える 1

0

UseColumnTextForButtonValueプロパティを true に設定すると、Textプロパティの値がボタンの値として使用されます。false に設定すると、各セルの値がボタンに表示されます。

コードでは true に設定されています。したがって、プロパティ値を変更するたびに、Textすべての行が更新されます。

UseColumnTextForButtonValueのデフォルト値は falseであるため、コードから以下の行を削除します。

PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
于 2015-01-13T14:03:34.587 に答える