メモ帳のようなアプリを作っているのですが、検索ダイアログと置換ダイアログで共通する部分があり、(検索文字列のテキストボックス、大文字小文字区別のためのチェックボックスなど)共有化したいと考えました。そこで、自作のダイアログクラスに静的な変数として各種のコントロールを定義して、インスタンス生成後、各自で必要な部品を追加するようにしました。
以下のコードですとコンパイルはうまくいくのですが、検索ダイアログに何も表示されず、置換ダイアログだけにコントロールが配置されてしまいます。staticを使うやり方が間違っているのでしょうか?解決策をご教示ください。
lang
1using System; 2using System.Drawing; 3using System.Windows.Forms; 4namespace notepad{ 5class Program{ 6 [STAThread] 7 static void Main(){ 8 Application.EnableVisualStyles(); 9 Application.Run(new MainForm()); 10 } 11} 12class MainForm : Form{ 13 MainMenu mainMenu; 14 MenuItem find, replace; 15 Form findDialog, replaceDialog; 16 RichTextBox textBox; 17 public MainForm(){ 18 this.Size = new Size(600, 400); 19 mainMenu = new MainMenu(); 20 find = new MenuItem(){Text="検索(&F)...", Shortcut = Shortcut.CtrlF,}; 21 find.Click += (sender,e) => {findDialog.Show();}; 22 replace = new MenuItem(){Text="置換(&H)...", Shortcut = Shortcut.CtrlH,}; 23 replace.Click += (sender,e) => {replaceDialog.Show();}; 24 textBox = new RichTextBox(){Dock = DockStyle.Fill,}; 25 mainMenu.MenuItems.AddRange(new MenuItem[]{find,replace}); 26 findDialog = new EditDialog(){Text="検索"}; 27 findDialog.Controls.AddRange(new Control[]{ 28 EditDialog.targetLabel, EditDialog.targetTextBox,}); 29 replaceDialog = new EditDialog(){Text="置換"}; 30 replaceDialog .Controls.AddRange(new Control[]{ 31 EditDialog.targetLabel, EditDialog.targetTextBox,}); 32 this.Menu=mainMenu; 33 this.Controls.AddRange(new Control[]{textBox,}); 34 } 35} 36class EditDialog : Form{ 37 static public Label targetLabel; 38 static public TextBox targetTextBox; 39 static EditDialog(){ 40 EditDialog.targetLabel = new Label(){ 41 Text = "検索する文字列(&N)", 42 AutoSize = true, 43 Location = new Point(20, 30), 44 }; 45 EditDialog.targetTextBox = new TextBox(){ 46 Location = new Point(150, 30), 47 Size = new Size(100, 20), 48 }; 49 } 50 public EditDialog(){ 51 this.Size=new Size(400, 150); 52 this.Closing+=(sender,e) => {this.Hide();e.Cancel=true;}; 53 } 54} 55}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/21 18:20