みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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
{
}
}

投稿日時 - 2013-08-22 11:06:06

QNo.8230581

すぐに回答ほしいです

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

Shownイベントの最初に以下のコードを挿入してください。
 if(this.DesignMode) return;

http://h-pg.blogspot.jp/2012/06/form-inherits-designer-error.html

投稿日時 - 2013-08-22 11:33:58

補足

早速の回答、ありがとうございます。

そもそも、何でこんなことが起こるのでしょうか。
全てで起こるのならいざ知らず、継承したものだけに
発生するというのが、よくわかりません。

VisualStudioの本来の仕様なのですか?それとも
不具合かなんかなのでしょうか。

補足で構いませんので、ご回答いただければ幸いです。

投稿日時 - 2013-08-22 12:00:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問