2011-08-15 67 views
1

我開發了一個基於C#表單的應用程序。它由多個文本框和幾個單選按鈕組成。如果我想爲這個應用程序創建我自己獨特的文件類型(例如 - * .ct),我將如何去做這件事?我想要達到的目的是讓用戶能夠進行文件保存 - 然後它將保存一個* .ct文件,這將是他們在文本框中輸入的信息以及他們選擇的單選按鈕。然後,我想在運行應用程序時選擇一個選項 - 文件 - >打開,他們可以打開* .ct文件,然後填充複選框並選擇他們選擇的單選按鈕。如果任何人都可以指出我在哪裏看到過這些代碼的鏈接,或者粘貼任何示例,我可以從中獲得幫助。在C#窗體上保存/加載輸入?

謝謝。

回答

2

我建議您寧願將文件保存爲XML,然後當您讀取xml文件時,您可以驗證它的模式以確定您的應用程序是否可以讀取它。

Xml文件是存儲信息的標準。這也允許你的應用程序在未來的日期可以使用標準格式在另一個應用程序之間進行通信。哪些是xml文件。

0

文件關聯由窗口處理。用戶可以知道使用哪種類型的應用程序來打開具有特定擴展名的文件。

在你的情況下,你會把* .ct和你的exe文件關聯起來。然後將完整路徑作爲參數提供給主函數。所以你需要在關聯擴展時處理文件參數。

對於文件打開和保存,有一個組件可以顯示文件打開和保存對話框。您可以將它們配置爲僅顯示* .ct。

2

它看起來像你想要做的快速和容易地將文件的內容映射到您的Windows窗體控件。

如果是這樣的話,那麼你應該考慮創建代表您的Windows窗體的各種狀態的類 - 生活在字符串屬性的文本框的內容,複選框布爾性能等

一旦你創建那麼你可以將它的一個實例綁定到所有的窗體控件上,這將意味着窗體數據綁定過程將保持你的UI和類同步。

最後一步是保存並加載數據。爲了對C#序列化做一些調查,有很多關於如何將一個類寫入文件表示形式的教程,其中您需要做的唯一工作是將一些屬性應用於該類,並從該類中調用正確的方法序列化命名空間。


下面是一些非常快速的代碼,顯示了帶有單個文本框和三個單選按鈕的示例窗體的數據綁定。你將需要爲你的真實案例進行實驗,以便正確實施你的支持課程 - 單選按鈕和單選按鈕組可能有點棘手。

我確信代碼可以改進,但它只是用來顯示方法。

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的實例,如果它存在的話,你會從你的文件反序列化這個類。

這種方法在某種程度上導致了MVVM方法,其中用於支持綁定的類很像View Model - 我建議進入這種思維模式,因爲您不希望綁定類開始包含邏輯。它只是在那裏給你一些東西來綁定和序列化的東西代表你的形式 - 你應該有其他邏輯包含對象,你是真正的模型。


我不會顯示序列化代碼 - 這裏有很多示例代碼。這裏是一個MSDN文章的鏈接,這將是一個很好的第一步:http://msdn.microsoft.com/en-us/library/ms950721.aspx

+0

嗨大衛 - 是的,這是更多我想要做的。如果用戶在textbox1中輸入'Hello',在'textbox2'中輸入'Test'並選擇單選按鈕A(選擇A或B) - 我想將這些信息保存到文件中。如果應用程序然後運行,我想加載這個文件,textbox1將包含'你好'等。 –