首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#:如何在Program.cs中引用form.cs中的内容?

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

Stack Overflow用户
提问于 2010-03-10 05:24:55
回答 4查看 18.6K关注 0票数 4

我正在尝试将一个值(来自一个对象)放置到一个变量中,并将其放在一个表单的文本框中。

以下是表单代码:

代码语言:javascript
代码运行次数:0
运行
复制
public Form1(Deck mainDeck)
    {
        InitializeComponent();
        int Val = mainDeck.ReturnCard(10);
        textBox1.Text = Val.ToString();
    }

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

问题线是: int = mainDeck.ReturnCard(10);

哎呀,错了。这才是真正的:

Error 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文件:

代码语言:javascript
代码运行次数:0
运行
复制
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传递给表单,但是我现在得到了一个不同的错误:Error 1 Inconsistent accessibility: parameter type 'Pcard.Deck' is less accessible than method 'Pcard.Form1.Form1(Pcard.Deck)' C:\Users\Chris\Documents\Visual Studio 2008\Projects\Pcard\Pcard\Form1.cs 14 16 Pcard

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

将mainDeck传递给Form1很好,但是如果我想让一个按钮点击这个对象中的一个方法,会怎么样呢?我试着像这样通过mainDeck:

代码语言:javascript
代码运行次数:0
运行
复制
 private void button1_Click(object sender, Deck mainDeck, EventArgs e)
        {
            mainDeck.Shuffle();
        }

我知道这个错误:

Error 1 No overload for 'button1_Click' matches delegate 'System.EventHandler' C:\Users\Chris\Documents\Visual Studio 2008\Projects\Pcard\Pcard\Form1.Designer.cs 51 35 Pcard

格鲁!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-10 05:44:35

行Deck mainDeck =mainDeck();只创建一个名为mainDeck的局部变量.它只能在Main()方法中访问.

把宣言放在课堂的主要方法之上.使程序类公开,主程序类作为公共静态.像这样

代码语言:javascript
代码运行次数:0
运行
复制
public class Program 
{ 
       // Create a Deck object 
   public static Deck mainDeck = new Deck(); 
    static void Main(string[] args) 
   { 
     .....

   }

然后,您就可以从表单中访问

代码语言:javascript
代码运行次数:0
运行
复制
 int Val = Program.mainDeck.ReturnCard(10);

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2010-03-10 05:32:56

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

代码语言:javascript
代码运行次数:0
运行
复制
public Form1(Deck mainDeck)
{
    InitializeComponent();
    int Val = mainDeck.ReturnCard(10);
    textBox1.Text = Val.ToString();
}

如果您需要在窗体代码的其他部分引用它,则可以将一个私有成员变量放置在.

代码语言:javascript
代码运行次数:0
运行
复制
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文件..。

代码语言:javascript
代码运行次数:0
运行
复制
Application.Run(new Form1(mainDeck));

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

代码语言:javascript
代码运行次数:0
运行
复制
namespace Pcard
{
    public class Deck
    {
        // and so on ... 

请注意,将Deck类保存在单独的.cs文件(如Deck.cs )中可能更干净。

票数 7
EN

Stack Overflow用户

发布于 2010-03-10 05:32:01

假设mainDeck是静态的,并且是公共的或内部的,您可以通过

代码语言:javascript
代码运行次数:0
运行
复制
int val = Program.mainDeck.ReturnCard(10);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2414723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档