gpt4 book ai didi

C#:如何在 form.cs 中引用 Program.cs 中的内容?

转载 作者:太空狗 更新时间:2023-10-30 00:12:46 27 4
gpt4 key购买 nike

我试图将一个值(来自一个对象)放在一个变量中,并将它放在一个表单的文本框中。

表单代码如下:

public Form1(Deck mainDeck)
{
InitializeComponent();
int Val = mainDeck.ReturnCard(10);
textBox1.Text = Val.ToString();
}

mainDeck 是我的 Program.cs 文件中的一个对象

问题是这一行:int Val = mainDeck.ReturnCard(10);

糟糕,错误的错误。这是真实的:

错误 1 ​​The name 'mainDeck' does not exist in the current context C:\Users\Chris\Documents\Visual Studio 2008\Projects\Pcard\Pcard\Form1.cs 17 23 Pcard

这是我的 Program.cs 文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Pcard
{
class Deck
{
public Deck()
{
// Assign standard deck to new deck object
// int j;
for (int i = 0; i != currentDeck.Length; i++)
{
currentDeck[i] = originalCards[i];
}
// Fisher-Yates Shuffling Algorithim --- Do initial shuffle
Random rnd = new Random();

for (int k = currentDeck.Length - 1; k >= 0; k--)
{
int r = rnd.Next(0, k + 1);

int tmp = currentDeck[k];
currentDeck[k] = currentDeck[r];
currentDeck[r] = tmp;
}
}
public void Shuffle()
{
Random rnd = new Random();

for (int k = currentDeck.Length - 1; k >= 0; k--)
{
int r = rnd.Next(0, k + 1);

int tmp = currentDeck[k];
currentDeck[k] = currentDeck[r];
currentDeck[r] = tmp;
}
}
public int[] ReturnDeck()
{
return currentDeck;
}
public int ReturnCard(int num)
{
return currentDeck[num];
}

public int[] originalCards = new int[54]
{
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,
0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D,
0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,
0x50, 0x51
};
private int[] currentDeck = new int[54];

}
public class Program
{
static void Main(string[] args)
{
// Create a Deck object
Deck mainDeck = new Deck();
Console.WriteLine("Here is the card array:");
for (int index = 0; index != 54; index++)
{
string card = mainDeck.ReturnCard(index).ToString("x");
Console.WriteLine("0x" + card);
}
//Return 10th Card
int PickCard = mainDeck.ReturnCard(10);
Console.WriteLine("Here is the 10th Card");
Console.WriteLine("0x" + PickCard);
//Shuffle
mainDeck.Shuffle();
Console.WriteLine("Shuffling..");
PickCard = mainDeck.ReturnCard(10);
Console.WriteLine("Here is the 10th card now: 0x" + PickCard);
Application.Run(new Form1(maindeck));
}
}
}

编辑:好的,我将 mainDeck 传递给 Form,但我现在收到一个不同的错误:错误 1 ​​可访问性不一致:参数类型“Pcard.Deck”的可访问性低于方法“Pcard.Form1.Form1(Pcard.Deck)” C:\Users\Chris\Documents\Visual Studio 2008\Projects\Pcard\Pcard\Form1.cs 14 16 卡片

编辑:编辑: 好吧,我现在可以正常工作了,但是我遇到了一个相关的问题,所以我宁愿把它放在这里也不愿放在一个新问题中。

将 mainDeck 传递给 Form1 工作正常,但是如果我想让按钮单击调用此对象中的方法怎么办?我试过像这样通过 mainDeck:

 private void button1_Click(object sender, Deck mainDeck, EventArgs e)
{
mainDeck.Shuffle();
}

我得到这个错误:
错误 1 ​​'button1_Click' 没有重载匹配委托(delegate) 'System.EventHandler' C:\Users\Chris\Documents\Visual Studio 2008\Projects\Pcard\Pcard\Form1.Designer.cs 51 35 Pcard

哎呀!

最佳答案

最简单的方法是更改​​表单的构造函数以传入 mainDeck。

public Form1(Deck mainDeck)
{
InitializeComponent();
int Val = mainDeck.ReturnCard(10);
textBox1.Text = Val.ToString();
}

如果您需要在表单代码的其他部分引用它,您可以保留一个私有(private)成员变量......

private Deck _mainDeck;

public Form1(Deck mainDeck)
{
InitializeComponent();
_mainDeck = mainDeck;
int Val = _mainDeck.ReturnCard(10);
textBox1.Text = Val.ToString();
}
}

private void SomeOtherMethod()
{
int blah = _mainDeck.Blah();
}

然后在你的 Program.cs 文件中......

Application.Run(new Form1(mainDeck));

编辑:针对您涉及 Deck 类可访问性的新错误,这是因为您的 Deck 类不是公开的。将 public 关键字添加到类声明中,因此:

namespace Pcard
{
public class Deck
{
// and so on ...

请注意,将 Deck 类保存在单独的 .cs 文件中可能会更清晰,例如 Deck.cs。

关于C#:如何在 form.cs 中引用 Program.cs 中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2414723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com