解决 按钮不'在我的第二种形式上工作

已加入
2020年8月10日
留言内容
19
编程经验
1-3
你好。我构建了一个应用程序,其中窗体上的按钮导致以编程方式创建第二个窗体。第一个窗体上的按钮可以正常工作,并可以创建第二个窗体,但是第二个窗体上的按钮似乎已被禁用。我将功能按钮之一复制/粘贴到第二个表单上,但是它不起作用。在此先感谢您的帮助!乔治。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
这是WinForms,WPF,WebForms,ASP.NET MVC还是其他?自从您发布到VS.NET常规讨论论坛以来,我们无法确定。

如果您向我们展示您的代码,也将极大地帮助我们。请在代码标签中发布您的代码。不要使用屏幕截图。
 
Last edited:
已加入
2020年8月10日
留言内容
19
编程经验
1-3
这是WinForms,WPF,WebForms,ASP.NET MVC还是其他?自从您发布到VS.NET常规讨论论坛以来,我们无法确定。

如果您向我们展示您的代码,也将极大地帮助我们。请在代码标签中发布您的代码。不要使用屏幕截图。
这是Windows窗体应用程序(NET Framework)

Form1.Designer.cs
DungeonCreationopenedForm = null;

Form1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DM
{
    public partial class MainScreen : Form
    {
        public MainScreen()
        {
            InitializeComponent();
        }

        private void ExitButton_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void DCButton_Click(object sender, EventArgs e)
        {
            if (openedForm == null)
            {
                //There is no Form, so create and open it
                openedForm = new DungeonCreation();
                openedForm.Show();
            }
            else
            {
                //there is a form. So close and get rid of the reference
                openedForm.Close();
                openedForm = null;
            }
        }

        private void PlayButton_Click(object sender, EventArgs e)
        {

        }
    }
}

Form2:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DM
{
    public partial class DungeonCreation : Form
    {
        public DungeonCreation()
        {
            InitializeComponent();
        }

        RandomCreation openedForm2 = null;

        private void GenerateDungeonButton_Click(object sender, EventArgs e)
        {
            GenerateDungeonButton.Text = "hi";
            if (openedForm2 == null)
            {
                //There is no Form, so create and open it
                openedForm2 = new RandomCreation();
                openedForm2.Show();
            }
            else
            {
                //there is a form. So close and get rid of the reference
                openedForm2.Close();
                openedForm2 = null;
            }
        }

        private void GenerateNPCButton_Click(object sender, EventArgs e)
        {

        }

        private void GenerateWeaponButton_Click(object sender, EventArgs e)
        {

        }

        private void GenerateArmourButton_Click(object sender, EventArgs e)
        {

        }

        private void GenerateMagicButton_Click(object sender, EventArgs e)
        {

        }
    }
}
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
首先,请不要发布未格式化的代码段。他们太难读了。

其次,不要仅仅发布所有代码。仅发布相关的代码。有时可能很难弄清到底什么和不重要,但可以保证名称空间导入和空事件处理程序不相关。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
关于您的问题,它们实际上是被禁用还是被实际启用,但是单击它们时未执行任何代码?您是否已将事件处理程序实际附加到它们?如果您只是将事件处理程序代码从一种形式复制到另一种形式,那么答案是"no"。您实际上必须将该方法注册为事件处理程序。您可以双击一个控件以创建默认事件的处理程序,该事件是 点击 为一个 按钮。如果您想对事件处理程序进行更细粒度的控制,请打开 特性 窗口,然后单击 大事记 工具栏上的按钮。然后,您可以双击任何事件以创建处理程序,也可以从下拉列表中选择一个现有方法。
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
我不得不说C#不像VB,VB中的事件处理程序是通过命名约定自动装配的。在C#中,您必须实际注册事件。当编译器看到类似事件处理程序的内容时,将不会插入代码来进行事件注册。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,049
地点
挪威
编程经验
10+
我不得不说C#不像VB,VB中的事件处理程序是通过命名约定自动装配的。在C#中,您必须实际注册事件。当编译器看到类似事件处理程序的内容时,将不会插入代码来进行事件注册。
在VB移至.Net之前已经很长时间了-还是VBA?
 
已加入
2020年8月10日
留言内容
19
编程经验
1-3
我找不到"events"在任何属性上。我双击第二组按钮分别创建事件处理程序-我不仅复制/粘贴了ehs。第二组似乎已被禁用。当我像功能按钮一样将鼠标悬停在它们上方时,它们不会突出显示。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,049
地点
挪威
编程经验
10+
事件不是属性,它是“属性”窗口的视图之一: 属性窗口-Visual Studio
1597347780647.png
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
那里列出了什么方法名称?它们与您在第3个帖子中拥有的方法名称相比如何?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
似乎对我来说很好...
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Diagnostics;

namespace WinForms
{
    class ChildForm : Form
    {
        public ChildForm()
        {
            var showMessage = new Button()
            {
                Text = "Show Message",
                AutoSize = true,
            };
            showMessage.Click += (o, e) => MessageBox.Show("Hi!");
            Controls.Add(showMessage);
        }
    }

    class MainForm : Form
    {
        MainForm()
        {
            ChildForm childForm = null;

            var showChild = new Button()
            {
                Text = "Show Child",
                AutoSize = true,
            };
            showChild.Click += (o, e) =>
            {
                if (childForm == null)
                {
                    showChild.Text = "Hide Child";
                    childForm = new ChildForm();
                    childForm.Show();
                }
                else
                {
                    showChild.Text = "Show Child";
                    childForm.Close();
                    childForm = null;
                }
            };
            Controls.Add(showChild);
        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
}
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
第二组似乎已被禁用。当我像功能按钮一样将鼠标悬停在它们上方时,它们不会突出显示。
他们有什么 已启用 属性设置为?他们是直接在表格上还是在 控制板 或类似的?是什么 已启用 那个父母的财产设置为?在设计时和运行时检查。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
有效!我要做的就是启用父表单。谢谢!
我想这提出了一个问题,为什么首先要禁用它,但这可能不是有用的讨论。
 
最佳 底部