Menu

问题 以其他形式访问按钮

伊斯梅尔

成员
已加入
2020年3月20日
留言内容
18
编程经验
1-3
嗨伙计。
我有一个包含5个按钮的表单,用于处理将传递给数据库的信息: 新的, 编辑, 删除, 取消。 通常,“保存”和“取消”被禁用,而其他的则被启用。例如,当用户按下New(新建)时,首先禁用3。保存和取消启用。依此类推(我想您已经看到了)。我创建了一个过程,该过程可以根据情况启用和禁用按钮,并且可以正常工作。现在,我的应用程序中还有许多其他表单具有相同的按钮,并且需要在它们上使用相同的例程。我的想法是在可以由所有形式访问的另一个类中创建例程。我的问题是:如何访问表单中的按钮?我已经将按钮的形式设置为public(而不是private)。怎么办?例如,我有带有按钮Bt_New,Bt_Edit,Br_Erase,Bt_Save和Bt_Cancel的Form1。我创建的类是例程。
在例程中:
C#:
public void buttons(int Op)
{
    if (op == 1)
    {
        Bt_New.Enabled = false;
        Bt_Edit.Enabled = false;
        Bt_Erase.Enabled = false;
        Bt_Save.Enabled = true;
        Bt_Cancel.Enabled = true;
    }
    else if (op == 2)
    {
        Bt_New.Enabled = true;
        Bt_Edit.Enabled = true;
        Bt_Erase.Enabled = true;
        Bt_Save.Enabled = false;
        Bt_Cancel.Enabled = false;
    }
}
有谁能够帮我?谢谢。
 
由主持人最后编辑:

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,568
地点
悉尼,澳大利亚
编程经验
10+
您发布的代码将无法按原样进行编译。发布您正在使用的实际代码很重要,因为任何微小的差异都可能使我们误入歧途。我已经进行了适当的更改,以便可以编译代码,但是我们不知道最终结果是否就是您实际运行的结果。
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,568
地点
悉尼,澳大利亚
编程经验
10+
您正在以错误的方式进行操作。您应该做的是创建一个用户控件,并将功能内置到该控件中。然后,您可以将该控件添加到希望使用UI和功能的任何表单中。另外,请勿对状态使用幻数。声明自己的 枚举 然后可能的值将仅限于您声明的内容,其中 整型 可能是任何东西,对阅读代码的人毫无意义。
 

伊斯梅尔

成员
已加入
2020年3月20日
留言内容
18
编程经验
1-3
嗨,jmcilhinney。首先,我不知道如何在此处设置文本格式。你能解释一下你是怎么做到的吗?
第二点:我没有详细说明代码(例如op的含义),因为它无关紧要。无论如何,此变量指示状态是导航还是版本。只是这个。您说的是用户控件,但我不知道如何创建它。您能提示我在哪里可以找到这个主题吗?或您能对此进行解释吗?
谢谢。
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,568
地点
悉尼,澳大利亚
编程经验
10+
您将用户控件添加到项目中的方式与添加表单几乎相同。然后,您也可以按照与表单相同的方式来设计用户控件。构建完成后,该控件会自动添加到 工具箱 您可以像将其添加到其他控件一样将其添加到表单中。在这种情况下,您需要添加五个 纽扣 并为其添加传递事件,即您的用户控件将处理 点击 的事件 纽扣 然后引发自己的事件,则表单将处理这些用户控制事件。在这种情况下,似乎只有两个状态 纽扣 这样您就可以省去 枚举 并使用一个 布尔 property:
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class EditingButtons : UserControl
    {
        public EditingButtons()
        {
            InitializeComponent();
        }

        private bool _isEditing = false;

        public bool IsEditing
        {
            get => _isEditing;
            set
            {
                _isEditing = value;

                newButton.Enabled = !_isEditing;
                editButton.Enabled = !_isEditing;
                eraseButton.Enabled = !_isEditing;
                saveButton.Enabled = _isEditing;
                cancelButton.Enabled = _isEditing;
            }
        }

        public event EventHandler NewClicked;
        public event EventHandler EditClicked;
        public event EventHandler EraseClicked;
        public event EventHandler SaveClicked;
        public event EventHandler CancelClicked;

        private void newButton_Click(object sender, EventArgs e)
        {
            NewClicked?.Invoke(this,EventArgs.Empty);
        }

        private void editButton_Click(object sender, EventArgs e)
        {
            EditClicked?.Invoke(this, EventArgs.Empty);
        }

        private void eraseButton_Click(object sender, EventArgs e)
        {
            EraseClicked?.Invoke(this, EventArgs.Empty);
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            SaveClicked?.Invoke(this, EventArgs.Empty);
        }

        private void cancelButton_Click(object sender, EventArgs e)
        {
            CancelClicked?.Invoke(this, EventArgs.Empty);
        }
    }
}
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,568
地点
悉尼,澳大利亚
编程经验
10+
我不知道如何在此处设置文本格式。你能解释一下你是怎么做到的吗?
您以前使用过文本编辑器。您通常如何设置文本格式?您可以在输入文本的右上方看到工具栏。您是否可以花一分钟时间浏览该工具栏并查看可用的选项?崭新就意味着您现在不知道。这并不意味着您无法尝试找出答案。如果您对软件或Internet并不陌生,那么找出来应该不是挑战。您是否准备好努力以帮助我们为您服务,这是一个问题。
 

羊皮

知名会员
已加入
2018年9月5日
留言内容
1,982
编程经验
10+
我已经向您解释过了。我很确定您是否能够在Winforms中拖放控件,您肯定知道如何使用论坛编辑器单击三个点以将代码插入代码标签中。
 

附件

  • CodeTags.gif
    CodeTags.gif
    138.5 KB · Views: 160

伊斯梅尔

成员
已加入
2020年3月20日
留言内容
18
编程经验
1-3
金西尼(Jmcilhinney)羊皮。感谢您提供编辑文字的提示。下次我会尝试这样做。
金西尼(Jmcilhinney)。我创建了您建议的用户控件,但是它没有用。请记住,对您来说,这应该很容易,但是对我来说(我对C#还是陌生的)非常困难。
用户控件确实在工具箱中可用,但是按钮并没有起到启用和禁用按钮的作用。另一点:我需要在这些按钮的click事件中包含代码。我怎样才能做到这一点?你有什么建议吗?另外,请耐心等待我。
谢谢。
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,568
地点
悉尼,澳大利亚
编程经验
10+
用户控件确实在工具箱中可用,但是按钮并没有起到启用和禁用按钮的作用。
你设置了 正在编辑 财产在适当的时候?您可以在控件内部或外部进行操作;以较合适的为准。例如,如果您始终想要 正在编辑 设置 真的 当。。。的时候 新的 单击按钮,您可以在用户控件内的相应事件处理程序中执行此操作。
另一点:我需要在这些按钮的click事件中包含代码。
正如我已经说过的那样,用户控件可以处理 点击 的事件 纽扣 在内部,然后引发其自己的事件,这些事件由表单处理。如果您需要在用户点击 新的 按钮,您可以处理 新的Clicked 用户控件的事件。
 
最佳 底部