C# 2010 contextMenuStripのファンクション名の不思議?
まず2ケのメニューアイテムを持つcontextMenuStripを作り、それぞれのTEXTを試験1、試験3と改名します
ダブルクリックするとハンドラーが出来て、その名称が(1)(2)のように TEXT名+ToolStripMenuItem_Click なります
ここでいったんプロジェクトを終了して再ロードします
画像のように試験1と試験3の間に『試験3を途中に追加』を入れてダブルクリックして作ったファンクション名は前2者とは異なり (3)の如くtoolStripMenuItem1_Click となってしまいます
なぜ 試験2を途中に追加ToolStripMenuItem_Click にならないのでしょうか?
private void 試験1ToolStripMenuItem_Click(object sender, EventArgs e) --- (1)
{ }
private void 試験3ToolStripMenuItem_Click(object sender, EventArgs e) --- (2)
{ }
private void toolStripMenuItem1_Click(object sender, EventArgs e) --- (3)
{ }
追伸 『試験3を途中に追加』が長すぎるかと思い、『試験3』だけにしても結果は同じでした
No.1ベストアンサー
- 回答日時:
これは インスタンスの作成過程の違いによるものだと思いますよ
試験1、試験3については 作成時に名前の変更している
追加した試験2は オブジェクトを作成後に表示テキストを追加している
といった違いだと思います
1)メニュー項目を追加する際のドロップダウン(コンボ)ボックスのドロップボタンを押してMenuItemを選択して追加を行います
2)その項目を選択してから一呼吸おいて もう一度クリックします
3)これで表示名テキストの編集モードになると思いますので ご希望の文字列に変更する
この手順が 途中に追加する場合とよく似ているかと思います
イベントハンドラの命名はオブジェクトの名前に依存しますので質問のような現象が起きると思います
追加の場合のポップアップの枝葉のMenuItemにもうひとつオブジェクトの名前入力などのオプションがあれば『試験2を途中に追加』といったオブジェクト名もつけられるでしょう
ですが、この操作が冗長であるのではないかとMicrosoftが判断したのかもしれません
漢字名のオブジェクトを作りたいのであれば 試験1、試験3と同様の手順で『試験2を途中に追加』を作成しておいて
D&Dで順序を入れ替えるほうが現実的かもしれませんよ
私なら 必要な項目数分MenuItemを追加してしまってから Nameプロパティでオブジェクト名を本来設定したい内容に変更するといった手順を取ると思います
ハンドラの生成はこの変更を行ってからやりますね …
添付画像の『試験5を途中に追加』は 左側が新規項目を最下段で作成して 右側のようにD&Dで順序を入れ替えたものです
このようにすれば漢字名のオブジェクト名で統一といった事も可能ですよ
分り易いご回答ありがとうございました
間違った理由も理解できました
方法論としては
【添付画像の『試験5を途中に追加』は 左側が新規項目を最下段で作成して 右側のようにD&Dで順序を入れ替えたものです】
が一番簡単でしたのでトライしたら一発OKでした
今後も宜しくご指導をお願い申し上げます
ありがとうございました
No.2
- 回答日時:
Clickイベントハンドラの名前はTextプロパティの値を付けているのではなく、ToolStripMenuItemのオブジェクトの名前(プロパティウインドウのNameの値)を用いて付けられてるからです。
通常、ContextMenuStripコントロールの上でToolStripMenuItemを追加するときは、メニューの一番下のコントロールの上でブランクになってるところにメニュー項目の名前を記入しますよね。
この入力中の時点ではまたToolStripMenuItemのオブジェクトは追加されていません。メニュー項目の名前の記入が終わってエンターを押すなり、コントロールのフォーカスを変えるなりした時点でオブジェクトが作成されます。この時、項目の名前として入力されたテキストがTextプロパティに設定されると共に、それを用いて「項目名ToolStripMenuItem」というオブジェクト名が付けられます。
したがって、このメニュー項目をクリックした時に生成されるClickイベントハンドラには「項目名ToolStripMenuItem_Click」という名前が付けられます。
一方、メニューの途中にToolStripMenuItemを挿入した場合は、その時点でオブジェクトが生成され、暫定的なオブジェクト名とTextプロパティの値が付けられます。それが「toolStripMenuItem1」とかいうものです。
このContextMenuStripコントロールの上のメニュー項目の名前を変更しても、それはTextプロパティを変更することにしかならないので、ToolStripMenuItemのオブジェクト名は変更されません。よって、このメニュー項目をクリックした時に生成されるClickイベントハンドラにはオブジェクト名を用いて「toolStripMenuItem1_Click」という名前が付けられます。
後者のイベントハンドラの名前を前者と同様に揃えたいのであれば、イベントハンドラを生成する前にプロパティウインドでToolStripMenuItemのオブジェクト名を変更しておく必要があります。あるいはイベントハンドラの生成をコントロール上のクリックで行うのではなく、プロパティウインドウ上で名前を直接付けて生成するかです。
もちろん、後からイベントハンドラの名前を変更することも出来ますが、変更点が多くなります。
『後者のイベントハンドラの名前を前者と同様に揃えたいのであれば、イベントハンドラを生成する前にプロパティウインドでToolStripMenuItemのオブジェクト名を変更しておく必要があります。あるいはイベントハンドラの生成をコントロール上のクリックで行うのではなく、プロパティウインドウ上で名前を直接付けて生成するかです。』
早速この方法でテストしてみました
結果は良好でした
ありがとうございます
この方法は極めて正当法であり、ロジック的にも説明力が高いと思います
回答者さまの技術の実力が偲ばれます
今後もお世話になります、ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- 大学受験 現代文の中間考査で、センター試験の追試験の過去問と同じ問題、同じ選択肢が5割も出題されます。本試験な 1 2022/10/10 11:40
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- 公認会計士・税理士 簿記一級から始めて税理士試験に挑戦したいと思っています、仕事をせず試験だけに専念した場合どの位の期間 2 2022/04/13 21:49
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- 学校 頑張りたいのに頑張れないです。 医療系の専門に通う者です。 今最終学年で国家試験を控えていますが成績 2 2023/01/11 23:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルのデータをwebフォーム...
-
桐V9での値の取得
-
<OBJECT>タグからJavascript呼...
-
エクセルVBAでセル番地を指定し...
-
ACCESSマクロ、Me![氏名] その...
-
「SHDocVw」の意味
-
【エクセル】複数のTextBoxに共...
-
Excel VBAでマウスの左クリック...
-
日本語の文字化けを直す方法
-
ディスクの総セクタサイズを取...
-
Access からオブジェクトとして...
-
VBAで選択範囲外の図形(オブジ...
-
ExcelのシートをAccessで表示し...
-
VBAでフォームのコントロールの...
-
VB.NET Image型データをファイ...
-
Bitmap.GetPixelより高速なもの
-
コードでオブジェクトを最前面に
-
EXCEL VBA ユーザフォームで複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
日本語の文字化けを直す方法
-
エクセルのデータをwebフォーム...
-
現在アクティブになっているオ...
-
PowerpointVBAで指定のShapeオ...
-
コードでオブジェクトを最前面に
-
【エクセル】複数のTextBoxに共...
-
Imageコントロールにグラフを表...
-
ユーザーフォームのインポート...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
-
Excel VBA でPictureBoxオブジ...
-
「SHDocVw」の意味
おすすめ情報