Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378

Почему не меняется текст заголовка формы из потока

14.04.2012, 11:04. Показов 2255. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему когда меняю через созданную мною функцию this.text не меняет своего значения?
пример
C#
1
2
3
4
5
6
private void SendDataSr(IAsyncResult iar)
        {
            Socket remote = (Socket)iar.AsyncState;
            int sent = remote.EndSend(iar);
            this.Text = "123456789";
        }
а если через кнопку меняет
C#
1
2
3
4
private void button1_Click(object sender, EventArgs e)
        {
            this.Text = "dsf";
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2012, 11:04
Ответы с готовыми решениями:

Как изменить текст заголовка формы
как изменить заголовок (название) формы? в каком блоке что нужно написать? VS2010

Почему не меняется текст в label. Qt C++
Нужно при нажатии кнопки "startButton" выводить текст "startButton pressed"void MainWindow::on_startButton_clicked() { QLabel *lbl...

Почему не меняется текст метки?
Почему не меняется текст метки???? import java.awt.*; import java.awt.event.*; public class fr extends Frame implements...

12
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
14.04.2012, 11:09
Цитата Сообщение от Fourd Посмотреть сообщение
Почему когда меняю через созданную мною функцию this.text не меняет своего значения?
пример
Наверное, потому-что ты не правильно используешь этот метод? Или вообще не используешь? Судя по тому обрывку что ты показал, можно только догадываться.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
14.04.2012, 11:10
Fourd, судя по сигнатуре метода SendDataSr, он у вас выполняется в отдельном потоке. Доступ к элементам управления разрешен только из основного потока, в котором, например, выполняется обработчик нажатия по кнопке. А ваш метод просто выбрасывает исключение и поток втихую схлапывается.
1
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
14.04.2012, 11:12  [ТС]
Ну даже если так, то вот возьмем пример при нажатии на кнопку чтобы передалось
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class login : Form
    {
        private MainForm cls;
        public login()
        {
            InitializeComponent();
            cls = new MainForm();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string log = textBox1.Text;
            string pas= textBox2.Text;
            cls.np = log;
            cls.ps = pas;
            if (log != "")
            {
                cls.Text = log.ToString();
            }
            cls.ConnectToServ();
        }
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
14.04.2012, 11:16
Цитата Сообщение от Fourd Посмотреть сообщение
Ну даже если так
Простите, что и как?

Цитата Сообщение от Fourd Посмотреть сообщение
C#
1
2
3
string log = textBox1.Text;
...
cls.Text = log.ToString();
Зачем строку в строку перегонять?

А так приведенный вами код отработает, да. Ну, если учесть, что обе формы стартовали из одного ит того же потока.
0
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
14.04.2012, 11:30  [ТС]
Все ровно не пойму, можете посмотреть на исходник
Вложения
Тип файла: rar ChatClientSpeakPort1_1.rar (641.4 Кб, 8 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
14.04.2012, 11:36
Просто ты создаёшь новое главное окно, которое висит в памяти и невидимо.
1
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
14.04.2012, 11:38  [ТС]
а как ссылаться на старое, не создавая новое?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
14.04.2012, 11:42
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public partial class MainForm : Form
    {
        public Socket ClToSr;
        public Thread receiver_;                    
        private Login login;
        public string np, ps;
        public bool CONNECTED;
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        //-------------
        //-------------
 
        private void button1_Click(object sender, EventArgs e)
        {
            login = new Login(this); // !!!
            login.Show();
        }
    }
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
    public partial class Login : Form
    {
        private MainForm cls;
 
        public Login(MainForm mainForm)
        {
            InitializeComponent();
 
            cls = mainForm;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string log = textBox1.Text;
            string pas= textBox2.Text;
            cls.np = log;
            cls.ps = pas;
            if (log != "")
            {
                cls.Text = log;
            }
            cls.ConnectToServ();
        }
    }
Добавлено через 1 минуту
Можно ещё через
C#
1
Application.OpenForms
обращаться к главному окну, что чуть геморнее, думаю в этом случае не принципиально.
1
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
14.04.2012, 11:48  [ТС]
Спасибо, можете еще помочь, я в другой теме спрашивал, почему при сериализациия класса.строки(MySend > message(string)), если писать на русском языке приходят ?????, а если на цифрах или английском, то все передается в точности? если изменить тип message с string на char, оно будет нормально передаваться?
и можно еще изменять this.text в ReceiveDataToSr() или не как?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
14.04.2012, 12:09
Добавь метод в нужную форму:
C#
1
2
3
4
5
6
7
        private void SetTextToForm(string text)
        {
            if (InvokeRequired)
                Invoke((Action<string>)SetTextToForm, text);
            else
                Text = 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
                switch (mes1.type)
                {
                    case 101: //connect
                        try
                        {
                            //Вот тут не понял, это ошибка такая, 
                            //что надо "склеивать" текст?
                            this.Text += " With "; 
                        }
                        catch { }
                        break;
                    case 100: //error login/password
                        try
                        {
                            SetTextToForm("SpeakPort: " + mes1.message);
                        }
                        catch { }
                        break;
                    case 102: //not found user
                        try
                        {
                            SetTextToForm("SpeakPort: " + mes1.message);
                        }
                        catch { }
                        break;
                }
Советую почитать это: Соглашения по оформлению кода, пока не испортил проект .

Добавлено через 2 минуты
Ну, впринципе, можно и такой метод добавить для сцепления нового текста с существующим:
C#
1
2
3
4
5
6
7
        private void ConcatWithExistingText(string text)
        {
            if (InvokeRequired)
                Invoke((Action<string>)ConcatWithExistingText, text);
            else
                Text += text;
        }
Добавлено через 1 минуту
C#
1
2
3
4
5
                switch (mes1.type)
                {
                    case 101: //connect
                            ConcatWithExistingText(" With "); 
                        break;
Добавлено через 6 минут
Цитата Сообщение от Fourd Посмотреть сообщение
Спасибо, можете еще помочь, я в другой теме спрашивал, почему при сериализациия класса.строки(MySend > message(string)), если писать на русском языке приходят ?????, а если на цифрах или английском, то все передается в точности? если изменить тип message с string на char, оно будет нормально передаваться?
Ничего не понял. Что за тема?
1
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
14.04.2012, 12:13
Яркий пример использования this
C#
1
2
3
4
5
6
7
8
class Test
{
    string T;
    public Test(string T)
    {
        this.T = T;
    }
}
без this компилятор не поймет какой Т вы присваиваете значение.
0
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
14.04.2012, 12:14  [ТС]
[QUOTE=Casper-SC;2910241]
C#
1
2
3
4
5
6
7
8
9
                    case 101: //connect
                        try
                        {
                            //Вот тут не понял, это ошибка такая, 
                            //что надо "склеивать" текст?
                            this.Text += " With "; 
                        }
                        catch { }
                        break;
ну там типо название программы + логин пользователя, и по мере получения сообщений или каких то новостей добавлялась или изменялось название формы, типо пришло сообщение "Speak Port: Login [1]"
ЗЫ: думаю я понял почему у меня сервер виснет на 6-7+ клиентах

Вот допустим приходит с сервера сообщение
C#
1
2
3
4
5
6
7
8
9
case 100: //error login/password
                        try
                        {
                            this.Text = "SpeakPort: " + mes1.message;
//mes1.message; - содержит текст "неверный логин/пароль" и когда это добавляется в форму там показывается ????????????,
но если написать "Error password or login" там так и пишется или будь то цифры, тоже нормально
                        }
                        catch { }
                        break;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2012, 12:14
Помогаю со студенческими работами здесь

Почему не меняется текст QPsuhButton?
ui-&gt;read-&gt;setText(QString(&quot;GGGGGGGG&quot;)); При этом программа зависает :-))))

Почему не меняется текст в заголовке окна?
Задание: при нажатии левой клавиши по окну программы - изменить заголовок калькулятора. У меня стоит Windows 10 (32 bits). Через Spy++...

Почему текст label меняется после нажатия
Всем привет! Короче говоря, застрял на одном моменте и не могу продвинуться дальше. Суть вот в чём: есть генератор случайных чисел (1 или...

Не меняется значение заголовка кнопок TButton и TSpeedButton (XE4)
Есть программа,которую мне нужно переделать.Само собой,что там на форме присутствует много таких компонентов,как TButton и...

Обновление контрола формы из отдельного потока не класса формы
Привет. Нужно подпнуть, что-то я не догоняю... Запускаю по клику отдельный поток для вычислений, в этом потоке есть обращение к другому...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
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