【问题标题】:Onload of form, have certain radio buttons selected加载表单,选择某些单选按钮
【发布时间】:2011-07-27 05:11:28
【问题描述】:

我有 2 个表格。我想在加载另一个表单后立即检查一个单选按钮(该按钮位于第二个表单中)。我试过了

OnLoad(radioButton2.Checked) 

但它没有奏效。有什么想法吗?

【问题讨论】:

  • 你应该为你的单选按钮命名。
  • 有什么特别的原因你不会在设计器中将 Checked 属性设置为 True 吗?

标签: c# forms radio-button onload


【解决方案1】:

如果我理解正确,您的一个表单上有一个单选按钮(我们将其称为 form1 以便我们区分它),并希望在加载另一个表单时更改它(我将在此处提及如form2)。

您需要牢记以下几点:

  1. 您需要确保可以从外部form1 访问该按钮。如果两个表单都是同一个项目的一部分(我猜是这样),那么您需要确保按钮是 protected internalinternalpublic 之一。
  2. form1 实际上是一个类;但出现在屏幕上的表单并不是form1 类本身:它是该类的一个instance。您将需要该实例的引用
  3. 要访问对象的成员,请使用.(点)运算符。例如,如果您的form1 实例被命名为myForm1,那么您需要输入myForm1.radioButton2 来引用单选按钮。当您省略对象引用时,它默认为当前对象(即代码正在执行的对象)。因此,当您为form1 输入代码时,您可以省略引用,但要从form2 访问它,您需要它(否则,编译器会认为您正在尝试在form2 中访问名为“radioButton2”的东西) ,这可能甚至不存在)。
  4. 单选按钮的Checked 是一个属性(更具体地说,是一个bool 属性):您可以获取或设置属性的值,但引用一个属性而不用做任何事情通常是没有意义的,在大多数情况下甚至不会编译。
  5. 如果您想执行代码以响应某个事件,那么您需要注册一个事件处理程序。事件处理程序只是一个返回 void 并接受几个参数(objectEventArgs 或它的某个子类)的函数。注册处理程序可以通过编程方式完成,但最好由设计人员完成。要创建和注册事件处理程序,请执行以下步骤: 5.1。在设计器上选择表单,然后转到“属性”窗口。 5.2.切换到事件视图(一个小闪电图标) 5.3.找到您要处理的事件。在这种情况下,OnLoad,然后双击它。 5.4.瞧!设计器为您的新事件处理程序创建了一个方法存根,为该事件注册了它,并将您发送到代码视图以便您填写它。

因此,假设您引用了您的 form1 实例(我将很快介绍),要标记单选按钮,您需要这样的语句:

myForm1.radioButton2.Checked = true;

这会将form1 类的myForm1 实例中包含的radioButton2 控件的Checked 属性设置为true;这有效地使单选按钮显示为选中状态。

现在,到了有趣的部分:如何获得对表单的引用?这取决于您(或代表您的 IDE)如何创建它。 如果form1 是您的应用程序的启动形式,并且您坚持在Visual Studio 中执行默认方式,那么请查看Studio 为您的项目创建的Program 类。那里应该有一个函数,名为Main。在某些时候,你会看到类似这样的一行:

Application.Run(new form1());

new form1() 部分创建form1 的新实例,并将其传递给Application.Run()(现在不要太在意这个调用的作用,我们只对引用感兴趣)。问题是引用是即时使用而不是保存的,但我们可以解决这个问题:在 Program 类上添加类似这样的内容,在 Main 之外:

internal static form1 myForm1;

然后用这两行替换Application.Run()调用:

myForm1 = new form1();
Application.Run(myForm1);

调用将执行相同的操作,但通过将其分解为两个步骤,我们能够保存对静态字段 myForm1 的引用。 现在,在您程序的任何地方,您都可以使用Program.myForm1 来引用该表单。因此,在 form2 中的 OnLoad 事件处理程序上,您需要做的就是:

Program.myForm1.radioButton2.Checked = true;

尽管如此,如果您从form1“调用”您的form2,那么您可以通过在将控制权传递给辅助表单之前检查按钮来节省一些繁琐的工作,如下所示:

radioButton2.Checked = true;
// Code that shows your "form2" goes here.

无论哪种情况,请记住将 form1form2 替换为您的表单的实际名称。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您只需将someRadioButton.Checked 设置为true
    等待OnLoad是没有意义的。

    如果出于某种原因,您确实想等待Load 事件,则需要为该事件添加一个处理程序并将您的代码放入该处理程序中。

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多