我正在尝试一个点击事件,它将打开另一个表单。我不希望用户能够关闭此窗口,因为再次执行click事件时收到以下异常。
System.ObjectDisposedException:'无法访问已处置的对象。 对象名称:“ Form2”。
我不确定我是否正确实施了此操作,或者是否有更好的方法来完成此操作。
Form1
var inOffice = true;
function idleUser() {
var time;
var start = new Date().getTime();
var idleTime = (new Date().getTime() - start) / 1000;
window.onload = resetTimer;
window.onmousemove = resetTimer;
window.onmousedown = resetTimer; // catches touchscreen presses as well
window.ontouchstart = resetTimer; // catches touchscreen swipes as well
window.onclick = resetTimer; // catches touchpad clicks as well
window.onkeypress = resetTimer;
function isInactive() {
console.log("You are not active");
inOffice = false;
if(idleTime) {
alert("You've been active for " + idleTIme);
}
}
function resetTimer() {
clearTimeout(time);
time = setTimeout(isInactive, 1000)
}
}
idleUser();
Form2
public Form2 f = new Form2();
private void Btnsearch_Click(object sender, EventArgs e)
{
f.Show();
}
答案 0 :(得分:2)
订阅Form.OnClosing并在传递给处理程序的事件args上设置Cancel属性。这将告诉运行时取消关闭事件。
由于事件已被取消,因此您必须自己隐藏表单(当然,使用Hide()
)。
private void Form1_Closing(Object sender, CancelEventArgs e)
{
this.Hide();
e.Cancel = true;
}
答案 1 :(得分:0)
form2的实例应在事件内创建
private void Btnsearch_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.Show();
}
答案 2 :(得分:-1)
有两种方法可以解决这个问题。
在FormClosing事件中,隐藏表单并取消事件通常更为有效,但这可能需要额外的逻辑。
除非您在创建表单时需要运行一些昂贵的代码,否则这可能无关紧要,并且简单地允许表单正常关闭会更容易。
无论哪种方式,您特别需要做的就是将一些保护措施放入btnSearch处理程序中,以便它可以适当地响应f
;形式的状态。
public Form2 f;
public void BtnSearch_Click(object sender, EventArgs e)
{
if (f == null || f.IsDisposed || f.Disposing) f = new Form2(...);
f.Show();
}