Windowsフォームアプリケーション メニュー関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
めにゅーづくり

Windowsフォームアプリケーション メニュー関数について

#1

投稿記事 by めにゅーづくり » 7年前

現在Microsoft visual 2010 C++で作業しています。
今回その中のwindows フォームアプリケーションのテンプレートを使った方法において

ボタン1を押すとテキストボックス内の文字で上のメニューの中に新しい項目が増えていき
それぞれにlabel1をその追加した文字に変化するイベントを作りたいと思っています。

最初関数を下のようにつくったのですが

コード:

void AddMenuItem()
		 {
           String^tuika;
           tuika=textBox1->Text;
			 MenuItem^AddMenuItem =gcnew MenuItem(tuika,gcnew System::EventHandler(this, &Form1::AddMenuItem_Click ) );
);
		     myMenuItemAdd->MenuItems->Add(AddMenuItem);//もともとmyMenuItemAddというMenuがつくってある
			 AddMenuItem->Click += gcnew System::EventHandler(this, &Form1::AddMenuItem_Click);
		    			
		 }
		private: System::Void AddMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				     
					 label1->Text=tuika;//
				 }*/
これでは2個目を追加したとき1個目のイベントも2個目と一緒になってしまいます。
そこで、AddMenuItemの部分をクリックするたびにAddMenuItem1、AddMenuitem2と区別させるようにしたいのですが方法はあるでしょうか?

またこの関数をクラスでつくろうとも考えたのですが、
その前段階であるmenuを作るところで次のようにつくったのですが

コード:

ref class MenuAdd{
private:
MainMenu^FileMenu;
public:
MenuAdd();
};
MenuAdd::MenuAdd{
FileMenu=gcnew MainMenu();
this->Menu=FileMenu;
}
これではまずthisが間違っていると出てしまうのと、またここでMenuを変えてもFormの方に反映されませんでした。
このFileMenuやMenuをFormのクラスに返す方法も良ければ教えてもらえるとありがたいです。
よろしくお願いします。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: Windowsフォームアプリケーション メニュー関数について

#2

投稿記事 by YuO » 7年前

めにゅーづくり さんが書きました:

コード:

		private: System::Void AddMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				     
					 label1->Text=tuika;//
				 }*/
これでは2個目を追加したとき1個目のイベントも2個目と一緒になってしまいます。
そこで、AddMenuItemの部分をクリックするたびにAddMenuItem1、AddMenuitem2と区別させるようにしたいのですが方法はあるでしょうか?
.NET Frameworkの標準のイベント規約では,senderは「イベントを発生させたオブジェクト」が入ることになっています。
なので,senderをMenuItemにキャストすることによってどのメニュー要素かを区別することが出来ます。
そこからTextプロパティを拾ってくればよいかと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Windowsフォームアプリケーション メニュー関数について

#3

投稿記事 by softya(ソフト屋) » 7年前

根本的な事でひっくり返すようで申し訳ないですがVC++2010のフォームがVC++2012で次のような状況になるとご存知でしょうか?
「VS2012のVC++でのwindowsフォームアプリケーションの作り方」
http://social.msdn.microsoft.com/Forums ... 35556bd138
つまり、VC++のフォームでGUIアプリを作ることは非推奨になります(作れないわけでは無いですが次世代2014?では無くなるかもしれません)。
どうしてもVC++2010のフォームじゃないとマズイと言う状況を除いて避けられた方が良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

めにゅーづくり

Re: Windowsフォームアプリケーション メニュー関数について

#4

投稿記事 by めにゅーづくり » 7年前

>YuOさん
どうもありがとうございます!!
senderのキャスト方法についていろいろと調べた結果
該当部分を次のようにしたらうまく機能しました。

コード:

private: System::Void AddMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
					 
					 label2->Text=((MenuItem^)sender)->Text;
				 }
この部分で詰まっていたので非常に助かりますし、いろいろと応用も出来る気がします。
本当にありがとうございました。

クラスにする場合もこれを使って考えてみます。

めにゅーづくり

Re: Windowsフォームアプリケーション メニュー関数について

#5

投稿記事 by めにゅーづくり » 7年前

>softyaさん
調べてもこのやり方の説明が全然のってないのはやはりそういうことだったんですね。。。
今作っているソフトは期限がかなりせまっているので、このままやってみます。

ただ次からに関してはC#などを勉強して作ってみたいと思います。
貴重な情報ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る