2010-11-18 4 views
1

私は、ユーザが開くファイルを選択する必要があるプログラムを作成中です。C#でフォームレイアウトを変更する

約3種類のファイルがあり、それらのファイルのそれぞれはボタンのレイアウトや属性の一部にも影響します。

問題は、私は、この巨大なリストを持っている現時点では、次のとおりです。

label1.Visible = false; 
label2.Visible = false; 
form.size = etc. 

各ファイルには、およそ16種類のコントロールに影響を及ぼし、そのためには、48点の可能な変更の合計です。

プログラムのレイアウトをより速く/より良い方法で整理できますか?

ありがとうございます。

フレームワーク:3.5 言語:C#

Windowsは、私がパネルにそれらをグループ化して、代わりにパネルの可視性を切り替えることをお勧めアプリケーション

答えて

5

フォーム。

+0

偉大なアイデアは、それを考えていたはずです。私はこれが答えであることをマークします、ありがとうございます。 – Nick

2

WPFを使用してアプリケーションを構築する場合は、Visual State Managerを使用してウィンドウのカスタム状態を定義し、状態に応じてコントロールの表示を設定できます。または、コントロールのvisibilityプロパティをViewModelのプロパティにバインドすることもできます。

将来の参考として、C#は言語です。アプリケーションに使用するフレームワークを指定する必要があります。

+0

ポインタの情報を追加しました。 – Nick

+0

私はあなたが使用しているWindowsアプリケーションフレームワークを指定する必要があることを意味しました:WPF、SilverlightまたはWindows Forms。 –

1

Brandonはパネルでグループ化することを提案しました。これは、16個のコントロールが長方形の領域に配置されている場合には合理的な解決策です。コントロールのグループに合理的な名前を与え、実行時にその名前でアクセスすることで、グループ化の別の形式を実現できます。

Windowsフォームを使用しているものとします。たとえば、この

label_1_1.Visible = false; 
label_1_2.Visible = false; 
//... 
label_1_16.Visible = false; 

のようなコードの16行を持つ代わりに、あなたのフォームに

Control FindControl(string name) 
{ 
    foreach (Control c in this.Controls) 
    { 
     if (c.Name == name) 
     { 
       return c; 
     } 
    } 
    return null; 
} 

をこの機能を追加し、それをこのように使用します。

for(int i=1;i<=16++i) 
    ((Label)FindControl("label_1_" + i)).Visible=false; 

(あなたが追加する必要がありますもちろん、いくつかのエラーチェック)

+0

それは非常に良いアイデアです、私は両方を試してみたいと思っています。ありがとうございました。 – Nick

0

私はそれぞれのレイアウトを独自のプレースホルダコントロールに入れました(すべてをinvisibに設定しましたマークアップで)を開き、必要なものを表示するロジックを追加します。

(ウェブフォームについて話していると仮定します)。

関連する問題