Передача переменных из файла в файл в C # - PullRequest
0 голосов
/ 15 января 2012

Как мне использовать переменную, объявленную в Program.cs, и получить доступ к ее значению из Form1.cs?

Я знаю, как сделать это в C, но я полностью потерялся в небольшом повороте Microsoft на C.

Program.cs:

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

namespace WindowsFormsApplication1
{
    static class Program
    {
        public static Lua lua = null;
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            lua = new Lua();
        }
    }
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LuaInterface;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            lua.DoString("print('hi')");
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 15 января 2012

Используя ваши примеры Program.cs и Form1.cs и предполагая, что они являются именами по умолчанию, и что у вас есть класс Program, который создает экземпляр класса Form1 и вы хотите передать параметр в Form1Класс, вы можете сделать следующее:

Определить конструктор для Form1, который принимает этот параметр и цепочку к конструктору по умолчанию:

private Lua lua;

public Form1(Lua lua) : this()
{
   this.lua = lua;
}

В вашем Program классе при создании экземпляра Form1, передайте ему параметр:

lua = new Lua();
Application.Run(new Form1(lua));

Обратите внимание, что я использую терминологию ООП - объекты и классы (не файлы).


Обновление:

Поскольку вы объявили переменную lua как открытый статический член класса Program, вы можете получить к ней доступ в любом местеВаша программа (при условии, что пространства имен были объявлены надлежащим образом) выглядит следующим образом:

Program.lua;

Хотя вы хотите создать экземпляр статического поля до , вызывая Application.Run.

В любом случае это делает объект общедоступным общим ресурсом для всех потоков, что делает его практически непроверенным и трудным для работы, если вы используете многопоточность.

0 голосов
/ 15 января 2012

В Program.cs, скорее всего, есть статический класс, определенный следующим образом:

static class Program
{
   ...
}

Если вы объявите переменную как public или internal, вы сможете получить к ней доступ из своегоform.

static class Program
{
    public static int myVariable;
    public static int MyProperty { get; set; }
}

В вашей форме вы получаете доступ к переменной и свойству с помощью:

int i = Program.myVariable;
int j = Program.MyProperty;

В объектно-ориентированном программировании вы обычно оставляете переменные закрытыми и объявляете толькосвойства как общедоступные.

0 голосов
/ 15 января 2012

Вы также можете получить доступ к параметру с помощью

Program.lua;

Но путь Одеда чище.

И в Main объект должен быть создан до Application.Run:

    static void Main()
    {
        lua = new Lua();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...