• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# 2010 contextMenuStripのファンクション名の不)

C# 2010 contextMenuStripのファンクション名の不思議?

このQ&Aのポイント
  • C# 2010 contextMenuStripを使用した際、試験3を途中に追加した場合のファンクション名が異なる理由について質問です。
  • 試験1と試験3の間に『試験3を途中に追加』を入れてダブルクリックして作ったファンクション名は前2者とは異なり (3)のような形になってしまいます。
  • なぜ試験2を途中に追加した場合には適切なファンクション名にならないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

これは インスタンスの作成過程の違いによるものだと思いますよ 試験1、試験3については 作成時に名前の変更している 追加した試験2は オブジェクトを作成後に表示テキストを追加している といった違いだと思います 1)メニュー項目を追加する際のドロップダウン(コンボ)ボックスのドロップボタンを押してMenuItemを選択して追加を行います 2)その項目を選択してから一呼吸おいて もう一度クリックします 3)これで表示名テキストの編集モードになると思いますので ご希望の文字列に変更する この手順が 途中に追加する場合とよく似ているかと思います イベントハンドラの命名はオブジェクトの名前に依存しますので質問のような現象が起きると思います 追加の場合のポップアップの枝葉のMenuItemにもうひとつオブジェクトの名前入力などのオプションがあれば『試験2を途中に追加』といったオブジェクト名もつけられるでしょう ですが、この操作が冗長であるのではないかとMicrosoftが判断したのかもしれません 漢字名のオブジェクトを作りたいのであれば 試験1、試験3と同様の手順で『試験2を途中に追加』を作成しておいて D&Dで順序を入れ替えるほうが現実的かもしれませんよ 私なら 必要な項目数分MenuItemを追加してしまってから Nameプロパティでオブジェクト名を本来設定したい内容に変更するといった手順を取ると思います ハンドラの生成はこの変更を行ってからやりますね … 添付画像の『試験5を途中に追加』は 左側が新規項目を最下段で作成して 右側のようにD&Dで順序を入れ替えたものです このようにすれば漢字名のオブジェクト名で統一といった事も可能ですよ

sato-may
質問者

お礼

分り易いご回答ありがとうございました 間違った理由も理解できました 方法論としては 【添付画像の『試験5を途中に追加』は 左側が新規項目を最下段で作成して 右側のようにD&Dで順序を入れ替えたものです】 が一番簡単でしたのでトライしたら一発OKでした 今後も宜しくご指導をお願い申し上げます ありがとうございました

その他の回答 (1)

回答No.2

 Clickイベントハンドラの名前はTextプロパティの値を付けているのではなく、ToolStripMenuItemのオブジェクトの名前(プロパティウインドウのNameの値)を用いて付けられてるからです。  通常、ContextMenuStripコントロールの上でToolStripMenuItemを追加するときは、メニューの一番下のコントロールの上でブランクになってるところにメニュー項目の名前を記入しますよね。  この入力中の時点ではまたToolStripMenuItemのオブジェクトは追加されていません。メニュー項目の名前の記入が終わってエンターを押すなり、コントロールのフォーカスを変えるなりした時点でオブジェクトが作成されます。この時、項目の名前として入力されたテキストがTextプロパティに設定されると共に、それを用いて「項目名ToolStripMenuItem」というオブジェクト名が付けられます。  したがって、このメニュー項目をクリックした時に生成されるClickイベントハンドラには「項目名ToolStripMenuItem_Click」という名前が付けられます。  一方、メニューの途中にToolStripMenuItemを挿入した場合は、その時点でオブジェクトが生成され、暫定的なオブジェクト名とTextプロパティの値が付けられます。それが「toolStripMenuItem1」とかいうものです。  このContextMenuStripコントロールの上のメニュー項目の名前を変更しても、それはTextプロパティを変更することにしかならないので、ToolStripMenuItemのオブジェクト名は変更されません。よって、このメニュー項目をクリックした時に生成されるClickイベントハンドラにはオブジェクト名を用いて「toolStripMenuItem1_Click」という名前が付けられます。  後者のイベントハンドラの名前を前者と同様に揃えたいのであれば、イベントハンドラを生成する前にプロパティウインドでToolStripMenuItemのオブジェクト名を変更しておく必要があります。あるいはイベントハンドラの生成をコントロール上のクリックで行うのではなく、プロパティウインドウ上で名前を直接付けて生成するかです。  もちろん、後からイベントハンドラの名前を変更することも出来ますが、変更点が多くなります。

sato-may
質問者

お礼

『後者のイベントハンドラの名前を前者と同様に揃えたいのであれば、イベントハンドラを生成する前にプロパティウインドでToolStripMenuItemのオブジェクト名を変更しておく必要があります。あるいはイベントハンドラの生成をコントロール上のクリックで行うのではなく、プロパティウインドウ上で名前を直接付けて生成するかです。』 早速この方法でテストしてみました 結果は良好でした ありがとうございます この方法は極めて正当法であり、ロジック的にも説明力が高いと思います 回答者さまの技術の実力が偲ばれます 今後もお世話になります、ありがとうございました