Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 16

Наследование в Windows Forms

02.03.2017, 12:50. Показов 2616. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться пожалуйста. Создаю я базовый класс Base и создаю класс наследник Tarif, в классе Tarif переопределяю один метод класса Base. На форме размещаю combobox, в коллекцию которого добавляю два элемента: базовый и тарифный. На форме порядка 10 кнопок. В зависимости от значения элемента combobox объявляю переменную соответствующего класса, т.е. если выбрали элемент "базовый", то создаю объект класса Base, иначе Tarif. Потом я хочу из обработчиков событий кнопок обращаться к этой переменной, но не получается, среда уже не видит что эта переменная была объявлена. Как это реализовать? Как объявить переменную в этой форме, которую можно определять как разные объекты в зависимости от условий и чтобы она была доступна из любых методов? в С# я новичок новичок ))) Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2017, 12:50
Ответы с готовыми решениями:

Будут ли работать приложения написанные на Windows Forms на Windows 8
Будут ли работать приложения написанные на Windows Forms на Windows 8? И собсно еще вопрос, вы считаете что время Windows Forms...

Как переделать Windows Forms приложение в Windows Service с UI?
Здравствуйте, уважаемые посетители форума! Вопрос такой. У меня есть приложение C# Win Forms с интерфейсом. Как из него сделать...

Перенос приложения Windows Forms в Windows Market
Как с минимальными затратами времени перенести десктопное приложение на магазин Windows ? Есть ли какая то возможность Использовать тот же...

6
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
02.03.2017, 12:55
Не совсем понятно. Лучше код покажите.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
02.03.2017, 13:17
C#
1
2
3
class Form1 : Form
{
    private Base _tarif;
0
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 16
02.03.2017, 13:36  [ТС]
Вот в качестве примера кусочек кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        BaseP p1 = new BaseP;  // здесь создаю объект Р1
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //Здесь хочу работать с объектом Р1
 
        }
       
        private void button2_Click(object sender, EventArgs e)
        {
            //И здесь хочу с ним же работать, с Р1
            
        }
}
}


Так вот в зависимости от значения, выбранного пользователем в checkBox я хочу менять класс объекта
BaseP p1 = new BaseP; если выбрали "базовый"
Tarif p2 = new Tarif если выбрали "тарифный"

Но не знаю как это реализовать.
Класс Tarif наследник класса BaseP, там несколько методов переопределено

Добавлено через 5 минут
Получается мне надо создавать объект каждый раз в обработчике события нажатия на кнопку. Если бы это сделать один раз и потом уже просто пользоваться методами соответствующего класса.
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
02.03.2017, 14:04
Цитата Сообщение от Margoigo Посмотреть сообщение
я хочу менять класс объекта
Я так понимаю Вы пишите о приведении типов? Опять же не понятно какую цель хотите достигнуть.
Ну а на счет выбора:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
BaseP p1 = new BaseP;
Tarif p2 = new Tarif
 
// В эту переменную сохраняем значения Вашего чекБокса
bool p1ORp2 = false;
 
public Form1()
{
  InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
 
  if (p1ORp2 ) 
  {
     // работаем с p1 
  }
  else
  {
     // работаем с p2 
  }
 
}
 
private void button2_Click(object sender, EventArgs e)
{
 
 if (p1ORp2 ) 
  {
     // работаем с p1 
  }
  else
  {
     // работаем с p2 
  }
 
}
Опять же не знаю, чего Вы хотите добиться, мне когда из множества однотипных обьектов нужно выбрать один я делаю так:

C#
1
2
3
4
5
6
7
8
9
10
List<MyObj> ListMO = new List<MyObj>();
 
// Вот сюда сохраняю ссылку на "текущий" обьект с которым хочу работать
MyObj CurentItem = null;
 
 
void SetCurentItem(int id)
{
  if (id < ListMO.Count) {   CurentItem  = ListMO[id]; }
}
0
0 / 0 / 0
Регистрация: 02.03.2017
Сообщений: 16
02.03.2017, 14:21  [ТС]
я хотела работать с Р1 и в зависимости от условия один раз определить ему тип (или Base или Tarif). Тут получается каждый раз проверяем условие и решаем с Р1 или с Р2 работать.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
02.03.2017, 14:26
Цитата Сообщение от Margoigo Посмотреть сообщение
в зависимости от значения элемента combobox объявляю переменную соответствующего класса
Надо не объявлять, а создавать, и присваивать переменной p1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2017, 14:26
Помогаю со студенческими работами здесь

Windows.Forms - Процедуры, цикл for и System.Windows.Forms.Button
Доброго времени суток. Есть WinForms программа: ... private ClickedButtonId, ClickedButtonX, ClickedButtonY:Integer; ...

Код для Windows Forms не работает в Web Forms?
В том году я делал лабораторки по Winforms. Естественно, они все у меня сохранились, и я полез в их код, вспоминать былое, так сказать,...

Выражение типа "System.Windows.Forms.Control" не может быть выражением типа "System.Windows.Forms.Menu"
Перевёл проект с версии 2008 на версию 2010 Наткнулся при компиляции на кучу не объявленных переменных и на 2 ошибки. Собственно с...

Установить курсор из файла *.cur имея Windows.Forms и Windows.Input
Имеется форма на Windows.Forms. Нужно заменить стандартный курсор, на курсор расположенный например по адресу 'C:\cursor.cur'. Как это...

Создание приложения Windows Forms на C++/CLI в Windows 8
Добрый день! Нужно создать windows приложение на Си++, стоит 8, на 2013 много заморочек с созданием windows forms. Не подскажите, можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru