Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2016, 17:40   #1
IonGig
Пользователь
 
Регистрация: 30.12.2014
Сообщений: 12
По умолчанию Изменение текста Label из другого класса

Добрый день, в общем у меня форма(Form1), на которой 5 кнопок. При нажатии на одну кнопку, я вызываю public void randomname() в другом классе(ссылка на который имеется), при этом в randomname() изменяется текст для остальных 4 кнопок, однако, дело в том, что при запуске приложения и нажатии на кнопку ничего не происходит. Конечно, можно просто получать значение из какой-нибудь переменной string класса, но мне нужно, чтобы все действия выполнялись в классе, а не в Form1.cs.
Собсна код формы:
Код:
using System; //и другие

namespace TeBrains
{
    public partial class Form1 : Form
    {
        egenerate generate = new egenerate();
        btnclicks buttonclick = new btnclicks();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            generate.equationgenerate();
            equation.Text = generate.EqText;
            label1.Text = Convert.ToString(generate.Result);

            buttonclick.btngenerate();
        }
    }
}
И код класса:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TeBrains
{
    public class btnclicks
    {

        private int btnrand;
        public string rtext;

        public void btngenerate()
        {
            Form1 form = new Form1();
            Random btnrandom = new Random();

            btnrand = btnrandom.Next(1, 4);


            if (btnrand == 1)
            {
                rtext = "keks1";
                this.rtext = form.FirstB.Text;
            }
            if (btnrand == 2)
            {
                rtext = "keks2";
                this.rtext = form.twoB.Text;
            }
            if (btnrand == 3)
            {
                rtext = "keks3";
                this.rtext = form.ThreeB.Text;
            }
            if (btnrand == 4)
            {
                rtext = "keks4";
                this.rtext = form.FourB.Text;
            }
        }
    }
}
IonGig вне форума Ответить с цитированием
Старый 28.04.2016, 17:43   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы создали новый экземпляр формы там.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.04.2016, 17:47   #3
IonGig
Пользователь
 
Регистрация: 30.12.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы создали новый экземпляр формы там.
Так, допустим, а как мне изменять данные не в экземпляре, а в самой форме. Ведь если писать так
Код:
this.rtext = Form1.ThreeB.Text;
то компилятор потребует ссылку на объект.
IonGig вне форума Ответить с цитированием
Старый 28.04.2016, 18:01   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

передать этот экземпляр методу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.04.2016, 18:03   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Экземпляр (instance) класса это синоним слова объект.

Не создавать новый, а использовать тот, что нужен. В коде Form1 его можно получить с помощью this.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.04.2016, 18:16   #6
IonGig
Пользователь
 
Регистрация: 30.12.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Экземпляр (instance) класса это синоним слова объект.

Не создавать новый, а использовать тот, что нужен. В коде Form1 его можно получить с помощью this.
А можно немножко разжёвывания для маленьких и глупеньких: в виде кода?
P.S. Пробовал пару вариантов без создания экземпляра, но увы
IonGig вне форума Ответить с цитированием
Старый 28.04.2016, 18:18   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
...
            buttonclick.btngenerate(this);
...
public void btngenerate(Form1 form)
        {
            Random btnrandom = new Random();

            btnrand = btnrandom.Next(1, 4);
...
pu4koff вне форума Ответить с цитированием
Старый 28.04.2016, 18:22   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
class MyClass
{
    void DoSomething()
    {
        MyClass inst = this;
    }

    void DoSomething2()
    {
        something.SomeFuncThatAcceptsMyClass(this);
    }
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.04.2016, 18:40   #9
IonGig
Пользователь
 
Регистрация: 30.12.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:
...
            buttonclick.btngenerate(this);
...
public void btngenerate(Form1 form)
        {
            Random btnrandom = new Random();

            btnrand = btnrandom.Next(1, 4);
...
Не получилось почему-то, пробовал для кнопок поставить модификатор доступа Internal - не помогло.
IonGig вне форума Ответить с цитированием
Старый 28.04.2016, 19:37   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а почему-то это почему?
читали сообщения?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt изменение текста label'ов Thez Qt и кроссплатформенное программирование С/С++ 9 05.01.2015 22:59
Динамическое изменение содержания текста Label. Возможно ли? Blame Microsoft Office Excel 5 10.12.2012 22:39
Label изменение стиля текста Zuba C++ Builder 2 06.05.2012 01:28
[C#] Изменение текста label1 из другого потока/класса GregRUS Помощь студентам 3 11.01.2012 09:24
автоматическое изменение размер текста в label bbk_serg Компоненты Delphi 15 04.02.2011 00:46