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

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

24.07.2009, 15:01. Показов 16944. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru