我非常新,所以我可能完全偏离了我想要做的事情。
我真的不知道如何提问,我的英语有点不稳定。
但我有2个文件,其中包含:
frmMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
Class1 cls = new Class1();
cls.Visibility();
}
}
}
另一个包含此文件的文件:
的Class1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
public partial class Class1
{
public void Visibility()
{
frmMain c = new frmMain();
c.label1.Visible = false;
}
}
}
我想要的是,当我运行程序并单击label1时,我希望它消失。 但事实并非如此。我没有任何错误或任何错误。 任何帮助表示赞赏:)。
提前致谢。
答案 0 :(得分:1)
首先:你为什么试图通过使用另一个类来让主体上的标签消失?
我建议如下:
private void label1_Click(object sender, EventArgs e)
{
label1.Visible = false;
}
我认为您的代码无法正常工作的原因是Visibility()
的{{1}}函数内部正在创建一个新的frmMain,并且在该frmMain上您正在设置Class1
属性label1为false。所以你实际上是在使用不同的形式。
答案 1 :(得分:0)
您正在设置另一个表单的标签的可见性(一个未显示的表单。
Visibility方法中的这行代码创建了一个新对象
frmMain c = new frmMain();
它与正在显示的表单类型相同,但它是一个不同的对象,不会显示。如果在上面的
之后插入一行c.Show();
您应该看到新创建的表单,并且还会看到标签消失
然而,您可以直接解决问题。将事件处理程序更改为此
private void label1_Click(object sender, EventArgs e)
{
((Label)sender).Visible = false;
}
发件人对象是被点击的控件,因为事件附加到自己的标签上。您需要做的就是将sender
转换为Label
的类型,然后您可以访问visible属性。或者你可以这样做:
private void label1_Click(object sender, EventArgs e)
{
this.label1.Visible = false;
}
使用当前对象(又名this
)并从该对象获取标签。
答案 2 :(得分:0)
您可以通过以下方式更改代码:
public partial class FrmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
new Class1().Visibility(this);
}
public void Go()
{
this.label1.Visible = false;
}
}
然后
public partial class Class1
{
public void Visibility(FrmMain form)
{
form.Go();
}
}
答案 3 :(得分:0)
您正在实例化一个新的单独表单。这意味着标签正在隐藏..但是在您创建的隐藏表单上。
您需要将当前表单实例传递到其他类:
public void Visibility(frmMain mainForm) {
mainForm.label1.Visible = false;
}
然后这样称呼:
new Class1().Visibility(this);
答案 4 :(得分:0)
您正在做的是创建窗口的第二个实例(这对您来说可能并不明显,因为您并未显示它)。然后你将标签隐藏在第二个窗口中。可能不是你想要的第一个。
您需要做的是将对原始表单的引用传递给您正在调用的方法,或者(根据您的意图)对您需要隐藏的控件的引用:
Class1中的:
public void Visibility(Control controlToHide)
{
controlToHide.Visible = false;
}
new Class1.Visibility(this.label1)
更多评论:
HideControl
,或HideLabel
比Visiblity
除此之外,快乐的C#-ing:)
答案 5 :(得分:0)
您不希望让Class1
了解frmMain
。把它改成这样的东西:
public class Class1
{
public bool GetVisibility()
{
return false;
}
}
从您的表单中,将其称为:
private void label1_Click(object sender, EventArgs e)
{
Class1 cls = new Class1();
this.Label1.Visible = cls.GetVisibility();
}
您当前的Class1
实施初始化新 frmMain
,隐藏该格式为Label1
,不对该实例执行任何操作(例如,它不< em> Show() it)然后返回,不影响已经实例化并显示的frmMain
实例(您实例化Class1
的实例)。
您可以通过将标签甚至表单传递到Class1
来更改此设置,但这只是糟糕的设计。