问题描述
我需要你的帮助来处理我正在处理的事情。我是 c# 新手,我正在创建一个包含多个表单的 winforms 应用程序。有一段代码需要出现在所有表单中,但由于我不想在每个表单中复制和粘贴它,我创建了一个存储该代码的类,然后我只想调用该类。>
我需要重复的全局代码如下,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Delfoi_Tourist_Guide
{
public class Login_User
{
public void CheckStatus()
{
DialogResult dialogResult = MessageBox.Show("Do your want to disconnect?;","disconnect",MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Welcome form1 = new Welcome();
form1.Show();
this.Visible = false;
}
else if (dialogResult == DialogResult.No)
{
MessageBox.Show("Συνεχίστε την περιήγηση σας!!!");
}
}
}
}
我还向您提供了另一种形式的一部分代码,我在其中应用了我的全局代码
private void linkLabel1_LinkClicked(object sender,LinkLabelLinkClickedEventArgs e)
{
Login_User loginUser = new Login_User();
loginUser.CheckStatus();
}
我的问题是我无法将“Visible”方法从我的全局类转移到其他类。我想这是因为我的全局类没有附加到 winform。这只是一段全球通用的代码。我做错了什么???
解决方法
试试这个
public static void CheckStatus(System.Windows.Form currentForm)
{
.....
currentForm.Visible = false;
`````
}
并调用它
.....
Login_User.CheckStatus(this);
.....
,
出现您的问题是因为关键字“this”作为属性应用于表单而不是类。在您的情况下,您必须在 CheckStatus 方法中将表单实例作为参数传递。但由于您希望这适用于您的所有表单,因此您必须键入“表单”一词。下面小编为您解答,
您的全球代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Delfoi_Tourist_Guide
{
public static class Login_User
{
public static void CheckStatus(Form currentForm)
{
DialogResult dialogResult = MessageBox.Show("Do your want to disconnect?;","Disconnect",MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Welcome form1 = new Welcome();
form1.Show();
currentForm.Visible = false;
}
else if (dialogResult == DialogResult.No)
{
MessageBox.Show("Συνεχίστε την περιήγηση σας!!!");
}
}
}
}
然后您必须将全局代码应用于所需的表单,如下所示。 请注意,您必须将整个类设置为静态才能使其正常工作。
将全局代码应用于表单
private void linkLabel1_LinkClicked(object sender,LinkLabelLinkClickedEventArgs e)
{
Login_User.CheckStatus(this);
}