フォームのデザイン時に表示イベントが発生する問題の対処法は?

このQ&Aのポイント
  • VSC#Epressで、フォームのデザイン時に表示イベントが発生してしまう問題について、解決方法を教えてください。
  • VisualStudioC#2010Expressを使用してフォーム(A)を作成し、そのフォーム(A)にShownイベントを取り付けます。そして、そのフォームを継承したフォーム(B)を作成します。すると、フォーム(B)のみ、実行時だけでなく、デザイン時にもShownイベントが発生してしまいます。
  • デザインしている途中でイベントが発生しないようにするには、どうすればよいでしょうか。
回答を見る
  • ベストアンサー

VSC#Epressで、FormのShowsに

お世話になります。 VisualStudioC#2010Expressにて、フォーム(A)を作成し、 そのフォーム(A)にShownイベントを取り付けます。 そして、そのフォームを継承したフォーム(B)を作ります。 すると、そのフォーム(B)のみ、実行時だけではなく、 VisualStudioでフォームのデザイン時に そのフォームを開くと、VisualStudio内でもShownイベントが発生してしまいます。 (A)のフォームでは、この現象は起こりません。 下記のように、表示時に閉じるか否かの分岐をしておくと、 デザイナでも開いた瞬間にメッセージボックスが出て閉じてしまい、 二度と編集できなくなってしまいます。 はっきり言って迷惑です。 デザインしている途中でイベントが発生しないようにするには、 どうすればよいでしょうか。 よろしくお願いいたします。 フォーム(A) 継承元 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private string a = null; public Form1() { InitializeComponent(); } private void Form1_Shown(object sender, EventArgs e) { if (a == null) { MessageBox.Show("aが設定されていません。"); this.Close(); } } } } フォーム(B) 継承先 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { public class Class1 : Form1 { } }

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

Shownイベントの最初に以下のコードを挿入してください。  if(this.DesignMode) return; http://h-pg.blogspot.jp/2012/06/form-inherits-designer-error.html

tatapatank
質問者

補足

早速の回答、ありがとうございます。 そもそも、何でこんなことが起こるのでしょうか。 全てで起こるのならいざ知らず、継承したものだけに 発生するというのが、よくわかりません。 VisualStudioの本来の仕様なのですか?それとも 不具合かなんかなのでしょうか。 補足で構いませんので、ご回答いただければ幸いです。

関連するQ&A

  • c#で次の次のフォームへのデータの渡し方

    c#で次の次のフォームへのデータの渡し方 お世話になります。 c#初心者です。 フォーム1にはbuttonが2つあり、どちらを押したかで 次(フォーム2)の次のフォーム(フォーム3)を開く時に そのフォームにあるボタンを表示させるか・非表示にさせるか したいと思っております。 中途半端ですが下記の様なコードを書いておりましてその先 フォーム3での記述をどの様に書いたら良いのか行き詰って しまいました。 どなたかご親切な方、ご教示頂きたく宜しくお願い申し上げます。           記 クラス using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { public class Keikaku { public enum Mode { Syuuse, Syoukai } } } ---------------------------------- フォーム1 namespace WindowsFormsApplication1 { public partial class MainMenu : Form { private void button1_Click(object sender, EventArgs e) { Form2 cForm2 = new Form2(); cForm2.Syuusei = Keikaku.Mode.Syuusei; cForm2.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { Form2 cForm2 = new Form2(); cForm2.Syuusei = Keikaku.Mode.Syoukai; cForm2.ShowDialog(); } } } ---------------------------------- フォーム2 namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private Keikaku.Mode _kakunin; public Keikaku.Mode Syuusei { set { _kakunin = value; } } private void button1_Click_1(object sender, EventArgs e) { Form3 cForm3 = new Form3(); cForm3.ShowDialog(); } } } ---------------------------------- フォーム3 namespace WindowsFormsApplication1 { public partial class Form3 : Form { } }

  • Form1で宣言したインスタンスをForm2で使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが、あるフォームで宣言したインスタンスを別のフォームで使う方法がわかりません。具体的にソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace tesuto {   public partial class Form1 : Form   {     class Car     {       public int a;     }     public void Form1_Load(object sender, EventArgs e)     {       Car bike = new Car();//ここで宣言したインスタンスを       bike.a = 10;       Form2 fm2 = new Form2(this);       fm2.Show();     }   }   public partial class Form2 : Form   {     public void Form2_Load(object sender, EventArgs e)     {       int b;       b = bike.a;//ここでこのように使いたい     }   } } ということです。 前も似たような質問をさせていただき、たくさんの回答をいただいたにも関わらず自分のプログラム能力が低く、理解できませんでした><。なのでよければ、回答は言葉だけではなくこの上のソースコードを基にして(コピペ貼り付けなどで)、すこしでいいですのでソースコードを書いていただけませんでしょうか。 また、プログラミングを初めてまだ間もないので、すこし初心者向けでお願いします。 質問する側なのに色々要求をして申し訳ないのですが、もし御面倒でなければ御回答をお待ちしております。 よろしくおねがいします。 

  • フォームを閉じる方法

    VC#2008ExpressEditionを使用して仕事で使う在庫管理ソフトを作成しています。 まず、ウェルカムページが開いて、その後認証ページが開くように作っていますが、認証ページが開いたのと同時にウェルカムページを閉じたいのですが、閉じることが出来ません。どなたか教えて下さい。 ウェルカムページのコーディング using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace zaiko { public partial class welcomeForm : Form { public welcomeForm() { InitializeComponent(); } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Form mainForm = new mainForm(); mainForm.Show(); } } } 認証ページのコーディング using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace zaiko { public partial class mainForm : Form { public mainForm() { InitializeComponent(); } private void mainForm_Load(object sender, EventArgs e) { Form welcomeForm = new Form(); welcomeForm.Close(); } } }

  • c#のプログラムについて。

    c#のプログラムについて。 お世話になります。 c#初心者です。 下記の様なコードを記述してますが、 「 Form1.Button1.Visible == false;」の部分で 「'WindowsFormApplication1.Form1'にButton1'の定義がありません。」 と言うエラーが出てしまいます。 どの様に定義して良いのかが分からず、悩んでいます。 どなたかお教え頂きたく宜しくお願い致します。        記 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication3 { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); string result = System.Environment.MachineName; if (result == "xxxxxxx") { Form1.Button1.Visible == false; } } } }

  • C# フォームを閉じてもプログラムが終了しない

    前略 ・C#の初心者です。 ・下記のようなプログラムを作りたいと思っています。プログラムは<作りたいプログラム>の仕様どうりに動作していますが、Form1のFormClosingイベントに Application.Exit()を追加しないと フォーム1で "X"(閉じる)をクリックしても(フォームは非表示になりますが)プログラムが終了しません。プログラムでどこかおかしな部分があると思っています。Application.Exit()を追加しないでもプログラムを終了する方法を教えてください。 <作りたいプログラム> (1)Form1 のbutton1をクリックすると新しいForm2が作成され表示される。Form2が表示されるとForm1は非表示となる。 (2)Form2 のbutton1をクリックするとForm2が非表示となりForm1が表示される。 (3)Form1 の "X"(閉じる)をクリックしてプログラムを終了する。 //Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formClose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); //フォーム2を表示 this.Hide(); //フォーム1を非表示 } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); //アプリケーション終了 } } } //Form2.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formClose { public partial class Form2 : Form { Form1 form1 = new Form1(); public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Close(); //フォーム2を閉じる } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { form1.Show(); //フォーム1を表示する } } } 以上

  • VC# 追加フォーム生成時、フォームに描画できない

    前略 ・VC#(.NET 2008)のプログラムでおしえてください。 ・メインのWindowsフォームからボタンクリックで 追加したサブWindowsフォーム上のピクチャーボックス上に何も操作なしでに描画したいのですができません。CreateGraphics()でオブジェクトを生成して描画しています。どのようにしたらよいのかおしえてください。フォームのイベントとして、Paint,Load,shown,Activated等いろいろやってもだめでした。  尚、サブフォームにボタンをもうけ このメソッドの中に描画コマンドを書き、ボタンを操作すると描画できます。下記は円を描こうとしていますが、shapeコンポーネントでは描けな複雑な描画をしたいと思っています。 ・以下に 下記の動作となるソースコードを記載します。 (1)起動するとメインフォームForm1のpictureBox1に 赤い円が描かれる (2)ボタンbutton1をクリックするとForm2が表示される。  Form2上のラベルlabel1とlabel2の文字色は青色に変わっています。  しかし、円は何故か描かれていません (3)Form2上のボタンをクリックすると赤い円がForm2上に描かれます。  どこをどのように直せば追加のサブフォームForm2が表示された時に Form2上のpictureBox1に円が描がかれているのでしょうか。以上、よろしくお願いします //----------------------------------------------------------- //メインフォーム using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace temp2 { public partial class Form1 : Form { public Form1(){ InitializeComponent(); } private void button1_Click(object sender, EventArgs e){ Form2 form2 = new Form2(); form2.ShowDialog(); } private void Form1_Paint(object sender, PaintEventArgs e){ Graphics g = pictureBox1.CreateGraphics(); g.DrawEllipse(Pens.Red, 0, 0, 200, 200); } } } //サブフォーム using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace temp2 { public partial class Form2 : Form { public Form2(){ InitializeComponent(); } private void pictureBox1_Paint(object sender, PaintEventArgs e){ label1.ForeColor = Color.Blue; Graphics g1 = pictureBox1.CreateGraphics(); g1.DrawEllipse(Pens.Blue, 0, 0, 50, 50); label2.ForeColor = Color.Blue; } private void button1_Click(object sender, EventArgs e){ Graphics g2 = pictureBox1.CreateGraphics(); g2.DrawEllipse(Pens.Blue, 0, 0, 50, 50); } private void Form2_Paint(object sender, PaintEventArgs e){ } private void Form2_Load(object sender, EventArgs e){ } private void Form2_Shown(object sender, EventArgs e){ } } } 以上

  • デフォルトコードの解釈_C#

    現在visual studio2010 C#を勉強中の者です。 VBAと連携させたアプリを作りたくて始めました。 ※自分で調べるのと同時並行で質問させて頂いております。 ▼質問 下記コードについてこれから様々なコードを覚えるにあたり どのような解釈をもっておけばよいでしょうか? 特に添付の色がついてる部分(青字)が知りたいです。 プログラム未経験の人間向けに噛み砕いて教えてくださると幸いです。 ↓↓プロジェクト(フォームアプリ)を立ち上げると最初から記述されているコードです。 コード-------------------------- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Sample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } } } ----------------------------------------― 何卒よろしくお願い致します。

  • usingディレクティブの初期値について

    お世話になります。 Visua C# 2010 を起動してコードエディタを表示した際、 usingディレクティブが以下のように表示されます。 -------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class Test { } } -------------------------------------- using System.IOを初期表示時に表示させたいのですが、 このusingの初期値はどこで指定するのでしょうか? どなたかご教授いただけないでしょうか? よろしくお願いいたします。

  • C# タスク非表示でタイトルバーは表示する

    前略 ・C#の初心者です。 ・タスクバーは下記のプログラムで非表示とすることができますが、同時にタイトルバーも消えてしまいます。タスクバーは非表示で、右端に閉じる・最大化・最小化アイコン("X"、 "□"、"_")のないタイトルバーを表示したいのですが、その方法をおしえてください。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace noTaskbar { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None;//タイトルバー&タスクバー非表示 this.WindowState = FormWindowState.Maximized;// } } } 以上、よろしくお願いします

  • C#で処理中の状況をStatusLabelに表示

    C#で処理中の状況をStatusLabelに表示させたいのですが、どうやらマルチスレッドを使えば良いらしい事は分かったのですが、説明しているページを参考にいろいろやってみたのですがどうもうまくいきません。 例えば次のような場合、10秒後に”9”と表示されて終わってしまうのですが、どの様に書き直せばよろしいでしょうか? すみません、どなたかご存じの方教えていただけないでしょうか。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace test_multithread3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { toolStripStatusLabel1.Text = i.ToString(); Thread.Sleep(1000); } } } }