С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/84: Рейтинг темы: голосов - 84, средняя оценка - 4.63
15 / 15 / 2
Регистрация: 24.07.2009
Сообщений: 59

Доступ к компонентам формы из класса

24.07.2009, 15:01. Показов 16941. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уже 4 часа пытаюсь решить проблему, но все усилия напрасны ...
Класс test присваивает значение "some text" ричтексбоксу, но на форме ричтекстбокс пустой...
Пробовал уже много вариантов, но результат одинаковый.
Код:
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
39
40
41
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;
 
namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {                
        }
        public string TextValue
        {
            set
            {
                this.richTextBox1.Text = value;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            test t = new test("some text");
        }
    }
    public class test 
    {
        Form1 frm = new Form1();
        public test(string text)
        {
            frm.TextValue = text;             
        }        
    }
}
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2009, 15:01
Ответы с готовыми решениями:

Доступ к компонентам другой формы
Здраствуйте. Из главной формы вызываю модальную форму. В коде обработчика события компонента второй формы нужно обратится к компоненты...

Доступ к компонентам формы из потока
имеется условно: private void button1_Click(object sender, EventArgs e) { Thread FirstThread = new Thread(FirstProc); ...

Доступ к компонентам первой формы со второй
Здравствуйте. Тема, вроде бы, уже не нова, но никак не могу сообразить. Есть первая форма (mainForm), кнопка и DataGridView на ней. По...

21
Администратор
 Аватар для mik-a-el
87822 / 53143 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
24.07.2009, 15:03
C#
1
2
3
4
5
6
7
8
9
public class test 
    {
        Form1 frm = new Form1();
        public test(string text)
        {
            frm.TextValue = text;
            frm.Show(); // <-----
        }        
    }
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.07.2009, 15:13
"... на форме ричтекстбокс пустой..."

исхожу из того, что форма видна. тогда:

frm.TextValue = text;
frm.Invalidate(); < ---

Добавлено через 5 минут 54 секунды
тю, дошло!

вы показываете один экземпляр формы, а потом каким-то хитрым путем, через кликанье по клавише создаете еще один экземпляр формы, которому меняете свойство, но не показываете саму форму. если вы и хотели создать из одной формы другую (зачем?), то покажите ее, как советует mik-a-el, иначе:

C#
1
2
3
4
private void button1_Click(object sender, EventArgs e){
 this.TextValue = "some text";
 this.TextValue.Invalidate ();// не знаю, перерисовывается ли он автоматически, если меняется его property
}
если вы хотите обязательно "из класса", как гласит заголовок, то дайте этому классу ссылку на "себя" (this). т.е. на ту форму, из которой все происходит, зачем вы создаете еще одну?
0
15 / 15 / 2
Регистрация: 24.07.2009
Сообщений: 59
24.07.2009, 15:17  [ТС]
Спасибо вам! Дошло
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
27.12.2009, 13:29
уже несколько дней пытаюсь решить проблему
создал класс
C#
1
2
3
4
5
6
7
8
 public class MyClass
            {
        Form2 form = new Form2();
        public void Mess() { MessageBox.Show("TEST"); }
        public void Size() {
            form.textBox1.Text = "csogpk";
        }
    };
в коде форм2 вызываю

C#
1
2
3
4
5
 public partial class Form2 : Form
    {
        MyClass myClass = new MyClass();
..........
    myClass.Size();
при выполнении получаю ошибку
An unhandled exception of type 'System.StackOverflowException' occurred in Wind.exe
на строке
Form2 form = new Form2();
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
28.12.2009, 22:35
Зашел в тупик, знаю что проблема ерундовая, но все же
Вложения
Тип файла: rar Wind.rar (88.1 Кб, 27 просмотров)
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
30.12.2009, 00:54
подумав немного в форм2 класс подключил так
C#
1
2
3
4
5
   public class myClass222
    {
        public MyClass2 myC = new MyClass2();
        Form2 form = new Form2(myC);
     }
как корректно написать конструктор в форме для передачи в него параметра myC?
Вложения
Тип файла: rar Wind new.rar (79.9 Кб, 26 просмотров)
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
01.01.2010, 20:18
люди может что-то сказать в чем облом,что не так
уже волосы рву на голове
0
101 / 101 / 19
Регистрация: 29.12.2009
Сообщений: 204
01.01.2010, 22:14
я, конечно в без году неделя, но всё же.
свойства класса надо инициализировать в конструкторе, а не внутри описания..
т.е такой код:
C#
1
2
3
4
5
6
7
8
 public class MyClass
            {
        Form2 form = new Form2();
        public void Mess() { MessageBox.Show("TEST"); }
        public void Size() {
            form.textBox1.Text = "csogpk";
        }
    };
я бы переписал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class MyClass2
    {
        Form2 form;// = new Form2();
 
        public MyClass2()//тот саммый конструктор
        {
            form = new Form2();
        }
 
        public void Mess()
        {
            MessageBox.Show("TEST");
        }
 
        public void Size()
        {
            form.textBox1.Text = "csogpk";
        }
    }
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
01.01.2010, 23:43
увы но ничего не удалось
при запуске ошибка An unhandled exception of type 'System.StackOverflowException' occurred in Wind.exe
на строке form = new Form2();
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
02.01.2010, 04:25
1) Поля класса можно инициализировать и при объявлении. При выполнении они будут проинициализированы перед запуском конструктора.
2) Может я чего-то не понимаю, но мне кажется, что этот код просто зацикливается. В конструкторе (точнее, перед ним (смотрите выше)) MyClass Вы создаете form2, в конструкторе которого Вы создаете MyClass и так далее по кругу. Потому и выскакивает исключение стека, а не ошибка компилляции.
2
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
02.01.2010, 15:34
как тогда с єтим бороться?
если можно простенький пример
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
02.01.2010, 16:23
Избавиться или от создания формы в полях класса, или от создания класса в полях формы.
Я же не знаю конкретной задачи, поставленной перед этим кодом.
1
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
02.01.2010, 16:49
задача получит доступ из к класса к компонентам формы
нужно будет выполнять операции для обработки изображения (например его уменьшение/увеличение)
для примера я решил сделать простой изменив надпись в текст боксе

Добавлено через 9 минут
в примерах, которые нашел в сети, сделано так, как у меня
пытался убрать создание формы в классе , но эффекта не было

буду благодарен если приведете рабочий пример доступа
0
101 / 101 / 19
Регистрация: 29.12.2009
Сообщений: 204
02.01.2010, 17:35
ну вот, хотя бы даже так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class MyClass2
    {
        Form2 form;
 
        public MyClass2(Form2 Form)
        {
            form = Form;
        }
 
        public void SetSize(int Width, int Height)
        {
            form.Width = Width;
            form.Height = Height;
        }
    }
а из Form1 работаем с ним так:
C#
1
2
3
4
5
6
7
8
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 newForm = new Form2();
        newForm.Show();
 
        MyClass2 myC = new MyClass2(newForm);
        myC.SetSize(150, 150);
    }
1
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
02.01.2010, 18:23
ЯТП в этом примере создается новая форма, и результат отображается в ней
но мне это не нужно
класс и его функции должны работать в той форме из которой они вызваны
например
нажимаю кнопку на форм1
вызываю свой класс который меняет надпись этой кнопки или выводит текст в лайбел или текст бокс
но сделано должно быть это через класс
0
101 / 101 / 19
Регистрация: 29.12.2009
Сообщений: 204
02.01.2010, 18:31
ну дык..
тогда ещё проще:
C#
1
2
3
4
5
    private void button3_Click(object sender, EventArgs e)
    {
        MyClass2 myC = new MyClass2(this);
        myC.SetSize(150, 150);
    }
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
02.01.2010, 19:37
Нужно передать в конструктору класса указатель на форму (т.е. MyClass mc = new MyClass(this); )
А в конструкторе, к примеру:
MyClass(Form myForm)
{ myForm.Text = "123"; }
Модераторам:
Я пишу с мобильного телефона. Потому не хочу использовать теги выделения кода.
1
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
03.01.2010, 16:28
Спасибо, разобрался
еще маленький вопрос как сделать обработку событий мыши в класс6 например при
MouseMove, я должен сделать
C#
1
2
x = e.X;
y = e.Y;
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
03.01.2010, 21:18
Обработка событии происходит в классе формы. В MyClass сделайте два общедоступных статических поля. А в событии присваивайте им нужные значения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2010, 21:18
Помогаю со студенческими работами здесь

Доступ к компонентам формы из пользовательского класса
Прошу показать пример как обратиться к компоненту формы, например к datagridview'у не через класс формы, например жму кнопку...

Доступ к компонентам формы из потока
Вообщем в потоке есть какие-то кусочки кода Требуется из потока добавить итем в ListView Пишу ...

Доступ к компонентам главной формы из дочерней
Всем здравствуйте, есть на делфи 2 формы: главная и дочерняя. Скажите пожалуйста, как находясь в дочерней форме получить доступ к полям,...

Доступ к компонентам формы из глобальной процедуры
Еще про процедуры?! Я создал свою процедуру procedure MNK (i,k:integer); прописываю в ней объекты, пишет ошибка...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru