2014-08-29 47 views
0

我有一個帶有menutrip的Winform新建,打開,保存和諸如此類的東西:Textbox 如何檢測文本框中未保存的數據並彈出一個窗口,要求用戶在關閉程序時保存其數據? 我尊重你的所有建議。檢測未保存的數據

+0

使用標誌,並在使用textbox,textchanged事件時重置。然後該標誌可以用於檢測用戶是否編輯任何東西 – 2014-08-29 11:01:08

回答

0

定義一個名爲isDataChanged的布爾變量並將其設置爲false。在文本框的按鍵事件上將此變量設置爲true。當用戶關閉程序時,檢查這個變量是否爲真。如果這是真的顯示一條消息,當用戶保存數據,將其設置爲false,否則退出程序:)

1

您需要註冊的所有文本框更改事件時知道文本框的文本改變或不

private void Form1_Load(object sender, EventArgs e) 
    { 
    var c = GetAll(this,typeof(TextBox)); 
    foreach (TextBox item in c) 
     item.TextChanged += new EventHandler(textBox1_TextChanged); 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     //set textbox tag = true to check whether text changed or not 
     ((TextBox)sender).Tag=true; 
    } 

    public IEnumerable<Control> GetAll(Control control,Type type) 
    { 
     var controls = control.Controls.Cast<Control>(); 

     return controls.SelectMany(ctrl => GetAll(ctrl,type)) 
            .Concat(controls) 
            .Where(c => c.GetType() == type); 
    } 

    // now you can get changed checkbox 
    List<TextBox> getchangedtextbox(){ 
    var c = GetAll(this,typeof(TextBox)); 
     // not get list of changed checkbox witch have null value in TAG 
     return c.Select(a=>a.Tag!=null); 
    } 
+0

我同意你的解決方案,並且我面臨未保存的列表,你能幫忙嗎? – 2014-08-29 11:02:47

+0

你可以發佈你的代碼示例,我們可以理解擊球手.. – 2014-08-29 11:05:21

+0

我認爲這個語句'返回c.Select(a => a.Tag!= null);'將返回c.Select(a => a.Tag!= null).ToList();' – 2014-08-29 11:12:16

0

您可以使用的一種方法是定義一個boolean變量,如bDirty

首先聲明這個變量作爲FALSE,但把它真正在你_TextChanged事件 - 例如myTextBox_TextChanged(所以bDirty將現在TRUE如果文本框被編輯)

在關閉/退出,然後檢查bDirty並顯示出如果消息框是bDirtyTRUE如下:

if (bDirty) 
{ 
    DialogResult result = MessageBox.Show("Do you want to save changes?", "Confirmation", messageBoxButtons.YesNoCancel); 
     if(result == DialogResult.Yes) 
      //... Do something 
     else if (result == DialogResult.No) 
      //...Do something esle 
     else 
      //...Do something else - go wild! 
} 

希望這可以幫助你!