2017-01-18 9 views
0

私は、フォーム(form1)とmenustrip1(menustrip1)とusercontrol(usercontrol1)を持つWindowsフォームアプリケーションを持っています。私はこのようなフォームにユーザーコントロールを読み込むコードを記述しました。 UserControl1 UC = new UserControl1(); UC.Dock = DockStyle.Fill; this.Controls.Clear(); UC.Controls.Add(menuStrip1); this.Controls.Add(UC); UCがロードされたら、メニュー項目を追加してイベントを処理したいと思います。問題は、このコードを使用して、機能しないアイテムを追加するときですが、エラーは発生しません。私はそれを間違っているのか、あるいは単にこのような方法でmenustripとやりとりすることはできませんか?C#フォームのユーザーコントロールからメニューストリップを制御する

menuStrip1.Items.Remove(fileToolStripMenuItem); ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click); fileToolStripMenuItem.DropDownItems.Add(Save);

+0

をあなたがコントロールコレクションをmenustripにアクセスしようとしたことがありますか? nameプロパティを入力すると、そのプロパティをインデックスとして使用できます。 – tinstaafl

+1

"File"と "File-> Save"がメニューストリップに表示されないという問題がありますか?メニューストリップから 'fileToolStripMenuItem'を削除すると、menustripには表示されず、' fileToolStripMenuItem'に追加された保存ボタンも表示されません。 – gunnerone

+0

私はあなたがコントロールコレクションを通してそれにアクセスすることによって何を意味するのかよく分かりません。私は、被災者を呼んでそのように操作することでコントロールにアクセスしていると思った。私の無知を許します私はどの言語でも正式な訓練を受けていません。 –

答えて

0

完全にあなたのアプローチに同意しない...「menuStrip1」を仮定し

は、メインフォーム上にドロップし、あなたのような「名前で」にアクセスすることができ、あなたのユーザーコントロールに追加正確な名、ということだったましたロード()イベントでは、この:

private void UserControl1_Load(object sender, EventArgs e) 
    { 
     MenuStrip menu = this.Controls["menuStrip1"] as MenuStrip; 

     ToolStripMenuItem File = new ToolStripMenuItem("File", null, fileToolStripMenuItem_Click); 
     menu.Items.Add(File); 
     ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click); 
     File.DropDownItems.Add(Save); 
    } 

また、ツールストリップのメニューで来るか、私は最初からそれを開始する必要があります既存のファイルに追加する方法はありますか?

"File"がすでにメインメニューに配置され、正確に "fileToolStripMenuItem"という名前が付けられていると仮定すると、これは上記の既に受け入れられているコードと非常によく似ています。代わりにthis.Controls()にアクセスするのは、しかし、我々はこのようにアクセスmenu.Items()をしたい:

 MenuStrip menu = this.Controls["menuStrip1"] as MenuStrip; 
     ToolStripMenuItem File = menu.Items["fileToolStripMenuItem"] as ToolStripMenuItem; 

     ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click); 
     File.DropDownItems.Add(Save); 
+0

私は上記を行い、それが私が探していたものです。問題は、あなたがこのようにしてプログラムするときです。 –

+0

また、ツールストリップメニューに付属している既存のファイルに追加する方法もありますか、それともゼロから開始する必要がありますか? –

+0

私はあなたが投稿したのと同じ時間になったでしょう。私はすべてを一緒に保つよりクリーンな方法ですので、この方法がより好きです。私は現在、この2つの作業を2つのユーザーコントロールで同時に使用しています。これは、1つのコントロールで複数のコントロールを操作できるようにすることが私の最終的な目標でした。先生ですか?物事を説明するあなたのやり方は私を正しい方向に導きます。あなたが私にコードをくれたことが大好きですが、あなたは物事をうまく説明します。 –

0

Gunneroneはそれを持っていました。メニューストリップとすべてのイベントをフォームのままにしておきます。 menustripclickで特定のユーザーコントロールに関連するメニュー項目を追加します。 UC呼び出しでは、アクションのパブリックメソッドを定義し、フォームから呼び出すだけです。これは簡単でしたが、私はこれを考え直しています。

関連する問題