Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для Dalein
5 / 5 / 0
Регистрация: 16.02.2011
Сообщений: 21

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

23.09.2013, 21:45. Показов 3477. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Или я тупой, или лыжи не едут, я так и не понял как это сделать. Есть форма, на ней textBox1 и button1. Есть мой класс MyClass в котором должен устанавливаться textBox1.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
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 WindowsFormsApplication14
{
    public partial class Form1 : Form
    {
      
        class MyClass
        {
           //Что то
                       
        }
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
           
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            //Что то
        }
    }
}
 Комментарий модератора 
Не нужно задавать свои вопросы в чужих темах
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.09.2013, 21:45
Ответы с готовыми решениями:

Graphics: доступ к главной форме из дополнительного класса
Есть клас Drawing и Form1. При рисовании использую двойную буферизацию. У меня есть : Bitmap, PictureBox, Graphics. Bitmap . Создаю: ...

Доступ к элементу listBox на форме из класса в Program.cs
Подскажите пожалуйста, как работать с элементами формы из класса в отдельном .cs файле. Код самого класса, из которого нужно...

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

5
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.09.2013, 03:05
Цитата Сообщение от Dalein Посмотреть сообщение
я так и не понял как это сделать. Есть форма, на ней textBox1 и button1. Есть мой класс MyClass в котором должен устанавливаться textBox1.text, внутри моего этого класса.
Велосипед, сделанный из лыж... Только извращенный мозг программиста может такое придумать
Не, ну правда. Вы описали, что на форме есть кнопка, для чего? Мы сами должны догадаться, что всё должно происходить по клику по ней? Если так, то зачем посторонний класс, если и событие клика, и изменение textBox1.text выполняется в одном и том же классе формы? Даже если допустить, что Вы хотите поизвращаться, то В чем именно проблема изменения textBox1.text из события формы через другой класс? Опишите, что из себя вообще представляет класс MyClass (т.к. в вашем коде он вообще вложен в класс формы, в чем я не вижу никакого смысла).
0
 Аватар для Dalein
5 / 5 / 0
Регистрация: 16.02.2011
Сообщений: 21
24.09.2013, 07:06  [ТС]
body90, Допустим я определяю класс в котором есть метод, получающий строку, как то ее обрабатывающий, и присваивающий значению свойства textBox1.text эту строку. В кнопке я создаю экземпляр моего класса, вызываю мой метод передавая ему строку, и ожидаю что на форме в textBox1.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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication14
{
    public partial class Form1 : Form
    {      
        class MyClass
        {
            public void SomeAction(string str)
            {
                //Как то обрабатываем полученную строку
                Form1.textBox1.text = str; //Здесь нужно преобразованую строку str присвоить свойству textBox1.text
            }                                  
        }
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
           
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MyClass MyCl = new MyClass();
            MyCl.SomeAction("some string");
        }
    }
}
Я думал вложенность моего класса в Form1 обеспечит доступ к его элементам, но нет. В дизайнере менял модификатор доступа textBox1, не помогло. Как мне реализовать то что я написал?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.09.2013, 14:50
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //this.textBox1.Text = (new MyClass()).SomeAction("some string");
            MyClass MyCl = new MyClass();
            this.textBox1.Text = MyCl.SomeAction("some string");
        }
    }
 
    class MyClass
    {
        public string SomeAction(string str)
        {
            //Как то обрабатываем полученную строку
            return str; //Здесь нужно преобразованую строку str вернуть из функции.
                           //Посудите логически: это функция, которая работает со строкой, а не меняет значения элементов формы.
        }
    }
}
1
 Аватар для Dalein
5 / 5 / 0
Регистрация: 16.02.2011
Сообщений: 21
24.09.2013, 16:18  [ТС]
body90, Спасибо, в желании взаимодействовать из другого класса с классом формы я уже не видел леса. Но все таки, есть возможность как то влиять на элементы формы именно из другого класса?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.09.2013, 19:13
Есть. В коде дизайнера формы дописать public static в объявлении элемента управления, к которому хотите получить доступ. Правда, в таком случае получите много гемороя с самой студией, т.к. каждый раз, при изменении чего-то в конструкторе, она будет удалять static. Как ещё один вариант, можно при самом объявлении формы в Program.cs вместо:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
написать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace WindowsFormsApplication1
{
    static class Program
    {
        public static Form1 myForm = null;
 
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            myForm = new Form1();
            Application.Run(myForm);
        }
    }
}
Тогда через WindowsFormsApplication1.myForm можно будет получить доступ к публичным элементам управления.
Чтоб сделать элемент управления публичным публичным, нужно в конструкторе формы кликнуть на элементе и в свойствах найти "Modifiers". Установить в "Public".

Добавлено через 1 минуту
Или даже так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace WindowsFormsApplication1
{
    static class Program
    {
        public static Form1 myForm = null;
 
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(myForm = new Form1());
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2013, 19:13
Помогаю со студенческими работами здесь

Доступ к форме из класса (VC++ 2005 EE)
Добрые люди, помогите пожалуйста. Условно говоря у меня есть форма с кнопкой и текстбоксом, заголовочный файл Form1.h и главный файл...

Из класса получить доступ к форме
Добрый день) есть два класса public ref class MyForm : public System::Windows::Forms::Form и class Printer Подскажите...

Как получить доступ к компоненту на форме из другого класса
Создал проект, кинул TextBox на форму, добавил в проект свой класс в файле h. Как из него обратиться к TextBox на форме?

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

Как получить доступ к методам класса, который содержится в векторе класса
Пишу дерево с любым количеством наследников. В классе Thread содержится вектор классов Thread. При попытке просмотра первого элемента в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru