0

我知道之前有人问过这个问题或问过类似的问题,但没有一个解决方案可以解决我的问题。

我有一个带有名为hitButton. 我需要做的就是从另一个类(即不是表单类)禁用这个按钮。

我的表单类是:

public partial class BlackJackTable : Form
{
}

我的单独课程是:

class GameWon
{
}

我试过BlackJackTable像这样公开一个公共方法:

public void DisableButtons()
{
    hitButton.Enabled = false;
}

并从GameWon构造函数访问(尽管我从类中的哪个位置访问它似乎并不重要),如下所示:

public BlackJackTable blackJackTable = new BlackJackTable();

public GameWon()
{
    blackJackTable.DisableButtons();
}

我尝试在以下位置使用变量GameWon

public Button hit;

并从 blackJackTable 分配:

GameWon gameWon = new GameWon();

public void Assign()
{
    gameWon.hit = this.hitButton; // or just = hitButton;
}

并禁用GameWon

hit.Enabled = false;

我尝试了其他几件事,但没有一个有效。我猜我错过了一些明显的东西,因为我尝试过的方法都没有奏效。

任何想法表示赞赏!

更新

我已经设法用文本框和图片框做后一种方法,按钮有什么区别?

4

4 回答 4

3

它不起作用的原因是您调用DisableButtons错误BlackJackTable. 您的GameWon类创建自己的不可见BlackJackTable对象,将其存储在BlackJackTable blackJackTable变量中,并禁用其按钮;您可见的表单对象不会被修改。

要解决此问题,您应该将BlackJackTable表单的实例传递给 的构造函数GameWon,并将其设置为变量:

private readonly BlackJackTable blackJackTable;

public GameWon(BlackJackTable blackJackTable) {
    this.blackJackTable = blackJackTable;
}

创建GameWon类实例的代码应将表单作为参数传递给构造函数:

GameWon gameWon = new GameWon(myBjTable);
于 2012-04-21T11:01:00.400 回答
0

您可以向原始类返回一个值,然后禁用该按钮:看看: 如何在服务器上运行的脚本中调用属性

于 2012-04-21T11:00:39.820 回答
0

我最终使用后一种方法解决了这个问题,但将 Button 变量设为静态。

public static Button hit;

一定是把课堂实例弄混了。谢谢你的想法。

于 2012-04-21T14:37:17.147 回答
0

您在构造函数中做了很多工作。这通常是不好的做法,尤其是对于表单。在显示表单之前,您似乎正在修改表单上对象的属性 - 我并不惊讶这会产生不可预测的行为。如果我猜的话,我会想象在您的代码运行后通过表单初始化来重置按钮状态。表单非常保护自己的生命周期要求,我认为您一定遇到了与表单如何为显示做准备有关的特质。

我必须指出,你在这里展示了一个非常奇怪的架构。我很难理解为什么你会选择以这种方式安排你的申请。我认为最好从控制器类与表单和游戏类进行通信,可能使用控制器中引发的事件来允许表单修改自身。让表单在屏幕上可见时修改自己的状态应该始终有效。

于 2012-04-22T09:07:12.840 回答