我有一个隐藏的表单,这会加载一个子表单,2e表单应该隐藏起来
请注意:我最不使用
ShowInTaskbar = false; // should be hidden too
如果我使用(隐藏/可见),我最能够在表单之间进行通信,直到它的visible = true;
this.SetParameterValueCallback += new SetParameterValueDelegate(ShowMain.SetParamValueCallbackFn);
ShowMain.AddItemCallback = new AddItemDelegate(this.AddItemCallbackFn);
//Showsub.Show();
Showsub.Hide(); // not working
到目前为止我已经尝试了
this.Visible = false; // didnt work
BeginInvoke(new MethodInvoker(delegate
{
Hide();
})); // didnt work
base.SetVisibleCore(false); // didnt work, Im not able communicate between form
答案 0 :(得分:5)
我真的不明白为什么你能够让它在一个而不是另一个工作。在调用Show()方法时防止表单变得可见需要重写SetVisibleCore方法。也许你可以利用这段代码:
private bool mAllowVisible = false;
public bool ReallyVisible {
get { return mAllowVisible; }
set {
mAllowVisible = value;
if (value) this.Visible = true;
}
}
protected override void SetVisibleCore(bool value) {
if (value && !IsHandleCreated) CreateHandle(); // Ensure Load event runs
if (!ReallyVisible) value = false;
base.SetVisibleCore(value);
}
答案 1 :(得分:3)
未来的googlers / searchers ......
有时您希望表单不可见,但是要让它认为它是可见的(例如,ReportViever控件不会呈现任何内容,如果表单将被所选答案中的方法设置为不可见),或者您想要在另一个线程的程序启动时显示第二个表单,并且不想通过闪烁第一个表单标题来惹恼用户......
如果是这样,你可以在form_Load事件上设置Opacity = 0
,它就可以了。从Windows 2000中可以了解这种神奇的Windows行为,并且在某些情况下非常有用。
答案 2 :(得分:1)
可能是我不明白这个问题
但是 如果您有任何表格,可以使用formobject.Visiable = false
隐藏它Form m = new Form();
m.Visible = false;
答案 3 :(得分:1)
如果你使用frm2.Hide(),这就是我在表格上的表现方式。它可以做trix
private void button1_Click(object sender, EventArgs e)
{
try
{
main_normal frm2 = new main_normal();
this.Hide(); //Hides Form1
frm2.ShowDialog(); //Displays main_normal
this.ShowDialog(); //After the main_normal is closed, again displays Form1
}
catch (Exception ex)
{
//this.Show();
MessageBox.Show(ex.Message, "wub wub Noe feilet men eg vet isje ka", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
答案 4 :(得分:1)
Hans Passant代码的替代版本是在初始隐藏发生时立即翻转开关:
private bool _hasHiddenInitially = false;
protected override void SetVisibleCore(bool value)
{
if (value && !IsHandleCreated) CreateHandle(); // Ensure Load event runs
if (!_hasHiddenInitially) value = false;
base.SetVisibleCore(value);
_hasHiddenInitially = true;
}
答案 5 :(得分:0)
public NewForm()
{
InitializeComponent();
SetVisibleCore(false);
}
private bool setCore = false;
protected override void SetVisibleCore(bool value)
{
base.SetVisibleCore(setCore ? value : setCore);
}
可能会有所帮助