0

私が開発しているアプリケーションの一部では、コードを使用して、wmi サーチャーから検出されたリムーバブル デバイスの数に基づいてテキスト ボックスを動的に作成しています。

これらのデバイスに関するより多くの情報を表示し、ユーザーがプログラム自体からデバイスを削除できるようにしたいので、テキスト ボックスを改善し、それぞれのテキスト ボックスにいくつかの拡張オプションを含む小さなコンテキスト メニューを作成しました。

各オプションはイベント ハンドラーで作成されるため、ユーザーがいずれかをクリックすると、相対的な操作が実行されます。

たとえば、「削除」オプションを使用するには、ユーザーが選択したテキストボックスを知り、そのテキストを取得して、いくつかのことを行う必要があります。

どうすればそれを達成できますか?ユーザーがどのテキストボックスを選択したかを知り、そのテキストを取得するにはどうすればよいですか?

これは私がこれまでに持っているものです:

foreach (UsbDisk disk in disks)
{
   ++count;

   TextBox[] usbTextBox = new TextBox[count];

   for (int i = 0; i < 1; i++)
   {
      var txt = new TextBox();
      var contextMenuUsbDev = new ContextMenuStrip();
      var ExtView = contextMenuUsbDev.Items.Add("View Extended Properties");
      var Remove = contextMenuUsbDev.Items.Add("Remove");
      ExtView.Click += ExtView_Click;
      Remove.Click += Remove_Click;
      contextMenuUsbDev.RenderMode = ToolStripRenderMode.System;
      contextMenuUsbDev.Size = new Size(211, 48);
      contextMenuUsbDev.Location = new Point(390, 240 + (i * 45));
      contextMenuUsbDev.Cursor = Cursors.Hand;

      txt.Location = new Point(390, 240 + (i * 45));
      txt.BackColor = Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
      txt.ForeColor = Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
      txt.Size = new Size(230,45);
      txt.TabIndex = i;
      txt.BorderStyle = BorderStyle.None;
      txt.ReadOnly = true;
      txt.Multiline = true;
      txt.WordWrap = true;
      txt.Font = new Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
      txt.ContextMenuStrip = contextMenuUsbDev;
      usbDevPanel.Controls.Add(txt);
      txt.AppendText(CR + count + ") " + disk.ToString());
   }
}

次に、対応するイベント ハンドラーを以下に示します。

 void Remove_Click(object sender, EventArgs e)
 { // Here I must perform the operations subject of this question, in order to proceed to removal operation}

void ExtView_Click(object sender, EventArgs e)
{ 
   // Here I need the same code to know with which device properties populate the form below;
   UsbDevicesProperties uDevP = new UsbDevicesProperties();

   uDevP.Show();
}

誰でも私を助けることができます。お願いします?私はたくさん検索しましたが、実行可能な解決策が見つからないようです。

あなたの助けを願っています。

ありがとう。

4

2 に答える 2

0

実際、あなたのアドバイスは私に正しい方向を示してくれました。Tag プロパティさえ必要ありませんでした。

ContextMenuStripを1つだけ使用するようにコードを編集した後、

私のコントロールはToolStripMenuItemであるため、ソリューションを直接使用できませんでしたが、このようにしてTextBox内のテキストを取得しました!

      void Remove_Click(object sender, EventArgs e)
        {
          var menuItem = (ToolStripMenuItem)sender;
          var owner = (ContextMenuStrip)menuItem.Owner;
          var text = (TextBox)owner.SourceControl;
          string diskValue = text.Text;
        }

ありがとう!!

于 2013-06-04T07:05:39.113 に答える