我有一個帶有menutrip的Winform新建,打開,保存和諸如此類的東西:Textbox 如何檢測文本框中未保存的數據並彈出一個窗口,要求用戶在關閉程序時保存其數據? 我尊重你的所有建議。檢測未保存的數據
檢測未保存的數據
回答
定義一個名爲isDataChanged的布爾變量並將其設置爲false。在文本框的按鍵事件上將此變量設置爲true。當用戶關閉程序時,檢查這個變量是否爲真。如果這是真的顯示一條消息,當用戶保存數據,將其設置爲false,否則退出程序:)
您需要註冊的所有文本框更改事件時知道文本框的文本改變或不
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);
}
我同意你的解決方案,並且我面臨未保存的列表
你可以發佈你的代碼示例,我們可以理解擊球手.. – 2014-08-29 11:05:21
我認爲這個語句'返回c.Select(a => a.Tag!= null);'將返回c.Select(a => a.Tag!= null).ToList();' – 2014-08-29 11:12:16
您可以使用的一種方法是定義一個boolean
變量,如bDirty
。
首先聲明這個變量作爲FALSE
,但把它真正在你_TextChanged
事件 - 例如myTextBox_TextChanged
(所以bDirty
將現在TRUE
如果文本框被編輯)
在關閉/退出,然後檢查bDirty
並顯示出如果消息框是bDirty
TRUE
如下:
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!
}
希望這可以幫助你!
使用標誌,並在使用textbox,textchanged事件時重置。然後該標誌可以用於檢測用戶是否編輯任何東西 – 2014-08-29 11:01:08