2011-08-15 18 views
1

私はC#フォームベースのアプリケーションを開発しました。多数のテキストボックスといくつかのラジオボタンで構成されています。このアプリケーション(例えば - * .ct)に独自の独自のファイルタイプを作成したいのであれば、どうすればいいのですか?私が達成したいのは、ユーザーがファイル保存に行くことができることです。テキストボックスと選択したラジオボタンに入力した情報である* .ctファイルを保存します。ファイル - >開くを選択すると、* .ctファイルを開くことができ、チェックボックスを埋めると、選択したラジオボタンが選択されます。もし誰かが私にこのコードを書かれたコードを見せてくれれば、私はそれが大きな助けになると思う例を貼り付けます。C#ウィンドウの入力を保存/読み込みしますか?

ありがとうございました。

答えて

2

ファイルをXMLとして保存することをお勧めします。次に、xmlファイルを読み込むと、スキーマが検証され、アプリケーションがファイルを読み取ることができるかどうかを判断できます。

Xmlファイルは、情報を格納するための標準です。これにより、アプリケーションが将来、標準フォーマットを使用する別のアプリケーション間で通信する可能性もあります。 XMLファイルはどれですか?

0

ファイルの関連付けは、ウィンドウによって処理されます。ユーザーは、特定の拡張子を持つファイルを開くために使用されるアプリケーションの種類を知ることができます。

あなたの場合は、* .ctをexeファイルに関連付けます。フルパスは、メイン関数のパラメータとして提供されます。したがって、拡張子を関連付けるときにファイル引数を処理する必要があります。

ファイルを開いて保存するには、ファイルを開いて保存ダイアログを表示するコンポーネントがあります。 * .ctのみを表示するように設定することができます。

2

これは、ファイルの内容をWindowsフォームコントロールに簡単かつ簡単にマッピングしたいように見えます。

その場合は、あなたがあなたのWindowsフォームのさまざまな状態を表すクラスを作成するをご覧ください - 文字列プロパティに住んで、テキストボックスの内容は、ブール型プロパティとしてチェックボックスをオンなど

あなたが作成したら、そのクラスを使用すると、そのインスタンスをすべてのWindowsフォームコントロールにデータバインドすることができます。これは、Windowsフォームのデータバインディングプロセスが、UIとクラスを同期させて保持することを意味します。

最後のステップは、そのデータを保存して読み込むことです。 C#のシリアライゼーションを調べるには、ファイル表現にクラスを書き込む方法についてのチュートリアルがたくさんあります。ここで行う必要のある作業は、クラスにいくつかの属性を適用し、正しいメソッドを呼び出すことです。シリアライゼーション名前空間。ここ


は、単一のテキストボックスと3つのラジオボタンで、例えばフォームのデータバインディングを示すいくつかの非常に迅速なコードです。バッキングクラスの適切な実装を得るためには、実際のケースを試してみる必要があります。ラジオボタンとラジオボタングループはちょっと難しいかもしれません。

私はこのコードを改善できると確信していますが、そのアプローチを示すことを意図しています。

public partial class Form2 : Form 
{ 
    private BindingClass backingClass; 

    public Form2() 
    { 
     InitializeComponent(); 

     backingClass = new BindingClass(); 
     backingClass.Name = "Hippo"; 
     backingClass.One = true; 

     textBox1.DataBindings.Add("Text", backingClass, "Name"); 

     radioButton1.DataBindings.Add("Checked", backingClass, "One"); 
     radioButton2.DataBindings.Add("Checked", backingClass, "Two"); 
     radioButton3.DataBindings.Add("Checked", backingClass, "Three"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(backingClass.Name); 
     if (backingClass.One) 
     { 
      MessageBox.Show("One"); 
     } 
     if (backingClass.Two) 
     { 
      MessageBox.Show("Two"); 
     } 
     if (backingClass.Three) 
     { 
      MessageBox.Show("Three"); 
     } 
    } 
} 

public class BindingClass 
{ 
    private bool one; 
    private bool two; 
    private bool three; 

    public string Name { get; set; } 

    public bool One { 
     get { return one;} 
     set 
     { 

       one = value; 
       two = !value; 
       three = !value;   
     } 
    } 
    public bool Two 
    { 
     get { return two; } 
     set 
     { 

      two = value; 
      one = !value; 
      three = !value;  
     } 
    } 
    public bool Three 
    { 
     get { return three; } 
     set 
     { 

      three = value; 
      one = !value; 
      two = !value;  
     } 
    } 
} 

上記のBindingClassのインスタンスを作成する場合は、ファイルからクラスを逆シリアル化します(存在する場合)。

このアプローチは、MVMSのアプローチに近づいています。ここでは、クラスはビューモデルのようにバインディングをサポートしていますが、バインディングクラスにロジックが含まれないようにしたいからです。バインドするものと、フォームを表すものをシリアル化するものがあります。実際のモデルであるオブジェクトを含む他のロジックが必要です。


シリアライズのコードは表示されません。これはオンラインでたくさんの例があります。ここに、良い最初のステップとなるMSDN記事へのリンクがあります:http://msdn.microsoft.com/en-us/library/ms950721.aspx

+0

こんにちはデビッド - はい私は何をしたいですか?ユーザーがtextbox1に 'Hello'を入力した場合、textbox2に 'Test'してラジオボタンA(AまたはBの選択肢)を選択します - その情報をファイルに保存します。アプリケーションが実行される場合、このファイルをロードしたいと思います。また、textbox1には 'Hello'などが含まれます。 –

関連する問題