Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
Dalein
3 / 3 / 0
Регистрация: 16.02.2011
Сообщений: 21
#1

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

23.09.2013, 21:45. Просмотров 1063. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 21:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к форме из класса (C#):

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

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

Доступ к элементам и методам класса из другого класса - C#
Пишу и понимаю, что создаю, наверняка, давно избитую тему, но вот уже второй день пытаюсь найти решение... Есть несколько классов с...

Доступ к свойствам экземпляра класса из другого класса - C#
Здравствуйте! У меня возникла программа с написанием программы на C#. "Реализовать набор классов, описывающих студента (с успеваемостью)...

Доступ к методу родительского класса из метода свойства родительского класса - C#
Не знаю правильно ли написал тему, ну суть такая, есть класс который описывает допустим шарик, а есть класс который описывает массив этих...

Доступ к другой форме - C#
FAQ почитал, но все равно не понял механизм взаимодействия форм.. Вообщем имеется frm_main - главная форма. Из главной формы...

5
body90
364 / 297 / 8
Регистрация: 26.05.2009
Сообщений: 2,676
24.09.2013, 03:05 #2
Цитата Сообщение от Dalein Посмотреть сообщение
я так и не понял как это сделать. Есть форма, на ней textBox1 и button1. Есть мой класс MyClass в котором должен устанавливаться textBox1.text, внутри моего этого класса.
Велосипед, сделанный из лыж... Только извращенный мозг программиста может такое придумать
Не, ну правда. Вы описали, что на форме есть кнопка, для чего? Мы сами должны догадаться, что всё должно происходить по клику по ней? Если так, то зачем посторонний класс, если и событие клика, и изменение textBox1.text выполняется в одном и том же классе формы? Даже если допустить, что Вы хотите поизвращаться, то В чем именно проблема изменения textBox1.text из события формы через другой класс? Опишите, что из себя вообще представляет класс MyClass (т.к. в вашем коде он вообще вложен в класс формы, в чем я не вижу никакого смысла).
0
Dalein
3 / 3 / 0
Регистрация: 16.02.2011
Сообщений: 21
24.09.2013, 07:06  [ТС] #3
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
364 / 297 / 8
Регистрация: 26.05.2009
Сообщений: 2,676
24.09.2013, 14:50 #4
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
3 / 3 / 0
Регистрация: 16.02.2011
Сообщений: 21
24.09.2013, 16:18  [ТС] #5
body90, Спасибо, в желании взаимодействовать из другого класса с классом формы я уже не видел леса. Но все таки, есть возможность как то влиять на элементы формы именно из другого класса?
0
body90
364 / 297 / 8
Регистрация: 26.05.2009
Сообщений: 2,676
24.09.2013, 19:13 #6
Есть. В коде дизайнера формы дописать 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
24.09.2013, 19:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 19:13
Привет! Вот еще темы с ответами:

Доступ к форме из метода - C#
При создании родительской формы создаётся другая форма: InitializeComponent(); BrowserForm bf = new BrowserForm(); bf.Owner = this; ...

Доступ к многократно открытой форме - C#
Доброго времени суток. Имеется родительская форма, на которой рисуется график, который состоит из нескольких линий, и из координат...

Доступ ко всем элементам на форме - C#
Собственно вопрос в описании..

Доступ к форме, через другие формы - C#
Существует 2 формы(А и Б), которые обе открывают форму В. Как на форме В определить с какой формы она была вызвана? Грубо говоря, на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru