2016-09-06 6 views
0

私はwinformsアプリケーションで作業しています。私はユーザーコントロールを含む "MainForm"と呼ばれるフォームを持っています。いくつかのシナリオでは非表示にする必要があるチェックボックスがユーザーコントロールにあります。なぜそれをプロパティにしたのですか?問題は、メインフォームを開いたときに、デザイナーがそのプロパティをfalseに変更すると、コントロールのチェックボックスが表示されないためです。Visual Studioは、フォームに変更があった場合はいつでもコントロールプロパティを変更します

このような動作を防ぐ方法はありますか? (私が使用しているVS2012)

UPDATE:

public myControl() 
    { 
     InitializeComponent(); 
     IsWebOmmitVisable = true; 
... 
:私はこれをtrueに設定し、コントロールのコンストラクタでpropeprty

public bool IsWebOmmitVisable 
    { 
     get { return ommitCheckBox.Visible; } 
     set { ommitCheckBox.Visible = value; } 
    } 

を持っている私のコントロールの分離コードで

しかし、それは問題ではないようです。
次に、このコントロールをMainFormに追加します。プロパティはコントロールのプロパティで表示されます。しかし、MainFormの要素のいずれかを変更すると、このプロパティはfalseに設定されます。ここ

プロパティ]ウィンドウで

http://i.stack.imgur.com/0fSvQ.jpg

+1

どのように表示を偽に設定しますか? VS – Hasson

+1

によって自動生成されない部分に設定する必要があります。そのプロパティのコードを共有します。 –

+0

現在のところ、この質問はあなたの財産のコードなしでは十分な情報がありません。私が推測すると、属性(https://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx)を使用してデフォルトになるようにする必要があります –

答えて

1

DesignerSerializationVisibilityAttributeを使用すると、プロパティがデザイナでシリアル化されなくなります。リンクから

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public bool IsWebOmmitVisable 
    { 
     get { return ommitCheckBox.Visible; } 
     set { ommitCheckBox.Visible = value; } 
    } 

DesignerSerializationVisibilityAttributeを使用すると、プロパティの値が表示され、隠し、初期化コードで永続化する必要がある、と初期化コードに永続化すべきではないかどうかを示すことができますプロパティに割り当てられたオブジェクトの隠しプロパティではなく、各パブリックに対して初期化コードが生成されるコンテンツで構成されます。 DesignerSerializationVisibilityAttributeを持たないメンバーは、Visibleの値を持つDesignerSerializationVisibilityAttributeを持つかのように扱われます。 Visibleとしてマークされたプロパティの値は、可能であれば、そのタイプのシリアライザによってシリアル化されます。特定の型またはプロパティのカスタムシリアル化を指定するには、DesignerSerializerAttributeを使用します。

0

のMainFormのクラスを選択し、Loadイベントで、次にダブルクリックし、イベントタブ(稲妻のアイコン)をクリックし、このフォームで、ロードイベントを追加します、あなたはあなたがチェックボックスコントロール

private void MainForm_Load(object sender, EventArgs e) 
    { 
     mycheckbox.Visible = false; 
    } 
0

simple form image

Form1.csの内部

とコード

のために望むように偽または真に見え設定することができます
private void Form1_Load(object sender, EventArgs e) 
{ 
    textBox1.Visible = false; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    textBox1.Visible = !textBox1.Visible; 
} 

これは完全に動作するはずです。 (ButtonはテキストボックスのVisibleプロパティをトグルします。)どのステップで間違っていたのか分かりません。

Form1_Loadは、デザイナーのフォームタイトルをダブルクリックすると自動生成されました。

button1_Clickは、デザイナーのbutton1をダブルクリックすると自動生成されました。

関連する問題