无法将全局 class 中的 "Visible" 方法应用于 C# 中的多个 winform

Cannot apply "Visible" method from a global class to multiple winforms in C#

我正在处理一些事情,需要你的帮助。我是 c# 的新手,我正在创建一个包含多个表单的 winforms 应用程序。有一段代码需要出现在所有表单上,但由于我不想将它复制并粘贴到每个表单中,我创建了一个 class 来存储该代码,然后我只想调用它class.

我需要重复的全局代码如下,

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();
        }

我的问题是我无法将“可见”方法从全局 class 转移到其他 classes。我想这是因为我的全局 class 没有附加到 winform。它只是一段在全球范围内使用的代码。我做错了什么???

试试这个

public  static void CheckStatus(System.Windows.Form currentForm)
 {
                .....
                currentForm.Visible = false;
                `````
 }

并调用它

   .....
 Login_User.CheckStatus(this);
   .....

出现问题是因为关键字“this”作为 属性 而不是 class 应用于表单。在您的情况下,您必须在 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("Συνεχίστε την περιήγηση σας!!!");
            }
        }
    }
}

然后您必须将您的全局代码应用到您想要的表单,如下所示。 请注意,您必须将整个 class 设置为静态才能使其正常工作。

将全局代码应用于表单

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Login_User.CheckStatus(this);
        }