Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Пару элементарных вопросы по основам C#


Автор: Ilfirin 29.8.2012, 15:11
Отсутствует понимание в следующем:

1) Другая форма не видит члены классы, хотя я объявил их public.

 Главная форма 

Код

amespace BCManager {
    public partial class MainForm: Form {
        // загружаемые настройки
        public struct Options {
            public bool ignorecount;
        }

        public Options options;             // загружаемые настройки
        public string appdir;               // директория приложения     
...


Создал еще одну форму (ScanForm) которую вызываю при нажатии на кнопке меню.
Так вот, в обработчиках этой формы я вижу структуры Options но не вижу переменные options, appdir. Как исправить?

2) Можно ли в C# инициализировать структуру как например в C++ через { }. 
Код

struct QWERTY {
  int a;
  string b;
}

...
QWERTY x = { 0, "test" };


Пробовал - не получается.

3) Подскажите(можно сторонний, на ваш взгляд удобный, навороченный) компонент таблицы. Ну что-то вроде дельфийского AdvGrid (TMS), NextGrid, cxGrid. Да хотя бы TStringGrid; Чтобы зараннее можно было настроить заголовок, колонки, выравнивание и т д. Такой компонент существует? Или какая-либо библиотека.
Без привязки к БД.

4) Я правильно понимаю, что в C# из любого модуля виден любой модуль, достаточно его добавить в папку Ссылки/References? То есть не надо что-то типа include или uses.

Извините, второй день за C#.

Автор: erm0l0v 29.8.2012, 20:43
1) По всей видимости вы не создали класс и пытаетесь обратиться к его полям.
Код

MainForm.options

Так вы не сможете добраться до поля, так как его нет. Для того чтобы обратиться к полю нужно либо сдетать его статическим либо создать объект класса.
а) Статическое поле:
Код

public static Options options;

После этого вы сможете обратиться к полю как в примере выше, но обратите внимание что значение этого поля будет одинаково для всех объектов класса MainForm.
б) Создание объекта:
Код

MainForm mainForm = new MainForm();
mainForm.options


Здесь мы создаем новый объект, и обращаемся к его свойству. Обратите внимание что в вашем примере MainForm это класс окна, объек этого класса создается при старте приложения в методе Main. Создавать второй объект не имеет смысла, так как это приведет к созданию еще одной формы. Для того чтобы использовать уже созданный объект вам нужно передать его другому классу. Для того чтобы узнать ссылку на объект внутри MainForm вы можете воспользоваться ключевым словом this:
Код

public partial class MainForm: Form {
     public void CreateScanForm()
    {
         ScanForm scanForm = new ScanForm(this);
         //...
    }
}


public partial class ScanForm : Form {
     public ScanForm(MainForm mainForm)
    {
           mainForm.options;
           //...
    }
}

2) Да можно и структуру и классы и масивы и много еще чего...
Код

MyClass myClass = new MyClass{Param1 = 1, Param2 = 2};
MyClass2 myClass2 = new MyClass2("str"){Param1 = 1, Param2 = 2}; // В случае класса с параметрами в конструкторе
int[] array = new int[]{1, 2, 3, 4, 5, 6};

3)
В случаю WinForms DataGridView.
В случае WPF/Silverlight DataGrid
4)
Да видны только классы помеченный модификатором доступа public. Ничего дополнительно менять не надо, просто добавить проект или dll в References.

Автор: Ilfirin 29.8.2012, 21:40
erm0l0v спасибо за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)