C # и переменная область в Winforms - PullRequest
0 голосов
/ 01 февраля 2010

В приложении Winform я хотел бы, чтобы данные в экземпляре класса были доступны для нескольких элементов управления формой.

Например, если я создаю Class Foo, который имеет строковое свойство name, я хотел бы создать экземпляр Foo a = new a (), нажав Button1, а когда я нажимаю Button2, я бы хотел иметь возможность на MessageBox.Show (a.name). Может быть несколько экземпляров Foo, если это вообще имеет значение.

Какой мой лучший вариант для возможности использовать экземпляры классов таким образом?

Ответы [ 5 ]

2 голосов
/ 01 февраля 2010

Закрытое поле или свойство класса удовлетворяет требованию - к этому полю могут обращаться все методы класса.

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

namespace Test
{
    public partial class Form1 : Form
    {
        foo a;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            a = new foo();
            a.name = "bar";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (a != null && a.name != null)
                MessageBox.Show(a.name);
            else 
                MessageBox.Show("");
        }
    }

    public class foo
    {
        public string name { get; set; }

        public foo() { }
    }
}

Если вы хотите, чтобы эта переменная была доступна для других форм, вам нужно сделать ее общедоступной (желательно как свойство) - C # winform: доступ к публичным свойствам из других форм и различие между статическими и общедоступными свойствами

1 голос
/ 01 февраля 2010

может быть, вы просто хотите статический класс

0 голосов
/ 01 февраля 2010

Джон Скит [C # MVP] Гость Сообщений: n / a

2: 15 мая 2007 г.

re: переменные приложения в csharp.


15 мая, 12:04, Control Freq писал: Цитата: Все еще новичок в csharp. Я пришел из C ++ фона. > В C ++ я бы создал несколько переменных верхнего уровня в приложении учебный класс. Это фактически глобальные переменные, к которым можно получить доступ во всем приложении, потому что объект приложения известен. > Что является эквивалентом этой практики? Кажется, я не могу добавить переменные в класс "Public Class Program" и получить доступ к ним из других файлов. > Я, наверное, упускаю что-то очевидное. По сути, вам нужны открытые статические поля (или предпочтительно свойства).

Альтернативой этому является синглтон: http://pobox.com/~skeet/csharp/singleton.html

Jon

Если сомневаетесь, найдите что-нибудь, подписанное Джоном Скитом. Найдено по: http://bytes.com/topic/c-sharp/answers/646865-application-variables-csharp

0 голосов
/ 01 февраля 2010

Форма, которую вы создаете - это просто другой класс, производный от Form. Класс существует в данном пространстве имен, поэтому вам просто нужно создать класс Foo в пространстве имен, совместно используемом формами вашего приложения.

Если класс совместно используется несколькими формами, то обычно вы выделяете этот класс в отдельный файл.

0 голосов
/ 01 февраля 2010

Winforms - это не что иное, как некоторые графические элементы, поддерживаемые кодом. Код может владеть / создавать объекты так же, как и обычный код, отличный от winform. Применяются те же правила определения объема.

Полагаю, у вас проблема в том, «как моя форма получает доступ к общему состоянию, определенному вне ее»? Создайте статический класс или установите для класса вашей формы установщик, который другой код может использовать для установки этого общего состояния.

...