Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121

Доступ к форме через другой класс

06.02.2012, 11:02. Показов 5389. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, создается форма Form1 в которой есть textBox1.
Создается класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
public class class3
    {
. . . . . . .
        public void prnt()
        {
            for (int i = 0; i < 5; i++)
            {
                Form1.textBox1.AppendText("a[i]");
            }
        }
. . . . .
    }
в котором я хочу иметь доступ к текстбокс1.

Но выдается ошибка
"Для нестатического поля, метода или свойства Form1.textBox1 требуется ссылка на объект"

Что нужно изменить здесь?
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2012, 11:02
Ответы с готовыми решениями:

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

Доступ к переменной на другой форме
Добрый день, проблема в следующем. Я создаю экземпляр класса на одной форме #pragma package(smart_init) #pragma resource...

Доступ к компонентам на другой форме
Как правильно обращаться к компонентам, расположенным на Form1 из Form2? В Unit2.cpp подключил Unit1.h. При компиляции ошибок не выдаёт. Но...

12
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.02.2012, 11:20
Изменить архитектуру приложения.
Код формы должен доставать данные из класса, а не класс "пихать" данные в форму.
Что если я хочу использовать ваш класс, но выводить текст не в текст бокс?
2
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
06.02.2012, 11:26  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Изменить архитектуру приложения.
Код формы должен доставать данные из класса, а не класс "пихать" данные в форму.
Что если я хочу использовать ваш класс, но выводить текст не в текст бокс?
я хочу создать по классу, каждый будет работать с разными типами данных. Соответственно вывод для каждого класса будет свой, и проще будет обратиться к методу класса для вывода данных.
0
 Аватар для Alex_Sabaka
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
06.02.2012, 11:30
Цитата Сообщение от vvApache Посмотреть сообщение
я хочу создать по классу, каждый будет работать с разными типами данных. Соответственно вывод для каждого класса будет свой, и проще будет обратиться к методу класса для вывода данных.
Нет, не проще! kolorotur, дело говорит. Код нужно писать так чтобы логика и интерфейс не мешались в одной куче.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.02.2012, 11:30
Ну если хотите выстрелить себе в ногу, то я могу помочь вам прицелиться
В метод print передавайте ссылку на соответствующую форму и обращайтесь к контролу через нее.

C#
1
2
3
4
5
6
7
8
9
10
11
12
public class class3
    {
. . . . . . .
        public void prnt(MyForm form)
        {
            for (int i = 0; i < 5; i++)
            {
                form.textBox1.AppendText("a[i]");
            }
        }
. . . . .
    }
Используется так:
C#
1
2
3
4
5
6
7
8
9
10
class MyForm : Form
{
   public TextBox textBox1;
 
   private void ShootInTheLeg()
   {
      class3 gun = new class3();
      gun.prnt(this);
   }
}
0
06.02.2012, 11:33

Не по теме:

У вас в названии метода и класса ошибки;)
Должно быть так:

C#
1
class Leg: Form {    public TextBox textBox1;      private void ShootInTheLeg()    {       class3 gun = new class3();       gun.shoot(this);    } }

0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
06.02.2012, 11:51  [ТС]
не понял как это делать)

C#
1
2
3
4
5
6
7
8
9
public partial class Form1 : Form создается, 
        
void prnt(Form1 form)
        {
            for (int i = 0; i < 5; i++)
            {
               [B] Form1.textBox1[/B].AppendText("a[i]");
            }
        }
делаю так, где выделено жирным выдает ту же ошибку
"Для нестатического поля, метода или свойства "WindowsFormsApplication2.Form1.textBox1 " требуется ссылка на объект"
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.02.2012, 12:03
Цитата Сообщение от Alex Sabaka Посмотреть сообщение
У вас в названии метода и класса ошибки
Издержки интеграции в существующую систему

Цитата Сообщение от vvApache Посмотреть сообщение
Form1.textBox1.AppendText("a[i]");
Form1 - это имя класса. А переменная, ссылающаяся на форму, называется form.
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
06.02.2012, 14:20  [ТС]
Form1 - это имя класса. А переменная, ссылающаяся на форму, называется form.
теперь
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
19.04.2012, 10:36  [ТС]
Вобщем, теперь нужно вызывать
C#
1
textBox1.AppendText("");
не из формы, а из класса.

Делаю метод
C#
1
public void print(Form1 form)
в классе, но вызвать его не могу - нужно передать ему форму как-то. Как?
C#
1
print(genethic.Form1);
не работает - Ошибка 1 "genethic.Form1" является "тип", который недопустим в данном контексте
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
19.04.2012, 15:05
Цитата Сообщение от vvApache Посмотреть сообщение
в классе, но вызвать его не могу - нужно передать ему форму как-то. Как?
Вам нужно создать экземпляр Вашего класса в Форме. Вставьте хидер класса в Fоrm1.h
#include "MyClass.h"
Объявите и создайте экземпляр - можете глобально (сделайте статическим полем), можете локально т.е. где нужно. Тогда сможете обратиться.
0
5 / 5 / 1
Регистрация: 08.05.2011
Сообщений: 121
22.04.2012, 09:28  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вам нужно создать экземпляр Вашего класса в Форме. Вставьте хидер класса в Fоrm1.h
#include "MyClass.h"
Объявите и создайте экземпляр - можете глобально (сделайте статическим полем), можете локально т.е. где нужно. Тогда сможете обратиться.
не понял если честно)
не нашёл файла form1.h в проекте.
У меня класс и форма находятся в одном файле form1.cs.
И экземпляр чего нужно объявить?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.04.2012, 12:48
Цитата Сообщение от vvApache Посмотреть сообщение
У меня класс и форма находятся в одном файле form1.cs.
И экземпляр чего нужно объявить?
Так уже легче.
Лучше бы фрагменты кода, потому-как опять придётся угадывать. Но думаю суть совета - верна. Об этом говорит компилятор.
Цитата Сообщение от vvApache Посмотреть сообщение
И экземпляр чего нужно объявить?
Возможно сказанное мною и то что будет сказано далее, к C# и не относится. Тогда Вам - легче
Итак у Вас объявлена и реализована форма - класс наследующий от класса Form в файле form1.cs.
Вы хотите получить доступ к экземпляру, а пытаетесь получить - к классу. Угадал?
В любом месте, глобально или локально, - как Вам нужно, так и объявите экземпляр класса. В другом классе, так в другом классе.
Как в C#, не скажу, но в С++/cli:
Для того, что бы это было ровнее, лучше бы отделить объявление (заголовочную часть) Вашей формы от определения (реализации). Тогда в файле объявления Вашего класса, можно вставить form1.h и тогда объявить экземпляр. Но сделайте тогда указатель на Form полем этого класса. В одном из конструкторов предусмотрите формальный параметр - указатель на Form. В данном конструкторе проинициализируйте данное поле принятым аргументом преобразовав к типу Form1 данный указатель и ... Вы получаете доступ к экземпляру формы в не статических методах класса.
Если Ваш класс меньше и проще, чем класс формы и стартует позже, из неё например, лучше всё сделать наоборот. Генерить экземпляр класса в форме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2012, 12:48
Помогаю со студенческими работами здесь

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

Как получить доступ к объекту, созданному в другой форме?
Я создал два окна, MainForm и FormInfo. В классе MainForm создаётся объект типа WindowsMediaPlayer. И мне нужно сделать так, чтобы такая...

Как получить доступ к ADOConnection из другой формы в ActiveX-форме
Есть приложение ActiveX, для которого я хочу сделать подчиненную форму. #Скажу сразу - в ActiveX я не нашел возможности создать именно...

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

Выход в интернет через другой доступ
1) Дома есть доступ к интернету с лимитным тарифным планом. 2) На работе есть доступ к интернету без лимитным тарифным планом. 3) Дома...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru