Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: изменение цвета текста в TextBoxe  (Прочитано 11380 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 02-05-2007 15:51 » 

Господа,

опять я с дурными вопросами   Здесь была моя ладья... :

есть форма, на ней - TextBox (там высвечиваются цифры). Я хочу при определенных условиях изменить цвет выводимого в нем текста: например, если число отрицательное, то цвет - красный, иначе - черный.
Можно ли это сделать, не перегружая TextBox, а используя OnPaint() своей формы? (у меня не вышло  Краснею )

Заранее спасибочки!
Записан

холоднокровней, Маня, Ви не на работе
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 02-05-2007 17:58 » 

TextBox.ForeColor
Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #2 : 03-05-2007 08:06 » 

nikedeforest,

попробовала изначально как самый простой вариант - фигушки...
Т.е. все еще интересней - если у контрола ReadOnly = false, тогда все работает, как и полагается (но я это определила только сегодня, когда увидела, что ты тоже про TextBox.ForeColor написал). А вот если у него ReadOnly = true, тогда ничего не работает... Но какая ему разница Не понял
Записан

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #3 : 03-05-2007 11:37 » 

Народ,

если кто-то найдет средство - поделитесь!!!
ПОка что я нашла только инфу о том, что при ReadOnly = true установка цветов перестает действовать, то бишь если таки очень надо это иметь, то надо самому перегружать класс и переписывать OnPaint(). Но предварительно необходимо сделать 2 вещи:

1) для самого контрола в его конструкторе установить

                SetStyle(ControlStyles.UserPaint, true);

2) при создании обьекта контрола самому ручками устанавливать серый цвет фона (почему-то он не передается от предка к наследнику...):

                 this.m_txtInfo.BackColor = SystemColors.InactiveCaptionText;

3) В контроле вводим переменную типа Color, которую устанавливаем затем извне в зависимости от наших пожеланий.

4) сам класс имеет при этом вид:
Код:
public class TextBoxPaint : TextBox
{
private Color m_color;

public TextBoxPaint()
{
SetStyle(ControlStyles.UserPaint, true);
}

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

// clear the background
Graphics g = e.Graphics;

  // the string to be drawn
string strCurText = this.Text;

// the font
Font fontNew = new Font("Arial", 10f);
// draw string with first font
SolidBrush brNew = new SolidBrush(m_color);
g.DrawString(strCurText, fontNew, brNew, new PointF(0, 0));
}

public Color CurColor
{
set {m_color = value;}
}
 
}

#endregion

5) в коде диалога - кроме того, что уже было указано:

- при инициализации еще надо указать исходный цвет текста:

            m_txtInfo.CurColor = SystemColors.ControlText;

- само использование различных цветов:

Код:
if (m_nMemoryRest < 0)
m_txtInfo.CurColor = Color.Red;   
else
m_txtInfo.CurColor = SystemColors.ControlText;   
m_txtInfo.Invalidate();

Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 03-05-2007 12:38 » 

при ReadOnly = true установка цветов перестает действовать

Таков, увы, закон природы (винды). Виндовский Edit на это не способен. Простого решения нет.
В своё время тоже с этим помучился.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #5 : 03-05-2007 13:10 » 

Мда, тогда точно нет счастья в жизни Ага Или жизнь какая-то не такая, или законы природы Ага Короче, пора что-то поменять Ага

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

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #6 : 04-05-2007 09:11 » 

nikedeforest,

и ты таки прав Ага
Кстати, инфу о том, что сия затея ничем, кроме потери времени, не увенчается, я нашла именно на каком-то форуме! МСДН же молчит, аки русский партизан...
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 04-05-2007 10:44 » 

Ир, слушай. В силу

Я хочу при определенных условиях изменить цвет выводимого в нем текста: например, если число отрицательное, то цвет - красный, иначе - черный.

А может тебе цвет фона менять? Всё-таки попроще. И с read only прокатывает.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #8 : 04-05-2007 13:07 » 

Джон,

пока что  начальник этого хочет, а точнее, это было первое, что я ему предложила Ага Может, когда он увидит результат, он захочет другого Ага Но для этого сначала ему надо показать то, что получилось.

А насчет проще - тут я не уверена, т.к. при ReadOnly = true вообще никакие цветовые изменения без перегрузки класса не прокатывают. Просто в плане наглядности это может выглядеть значительно лучше. Или я опять что-то пропустила мимо ушей?
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 04-05-2007 13:42 » 

Цвет фона можно менять по OnCtlColor (я знаю, что ты теперь вся из себя крутая додиезка и на простых смертных сиплюснутых-мфситнутых смотришь свысока Ага ) но в принципе это возможно.
Наверняка чё-нить подобное есть и в этой удотнутой апишной обёртке. Ага

ps хотя конечно начальству видней
« Последнее редактирование: 04-05-2007 13:44 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #10 : 04-05-2007 16:02 » 

Джон,

я пока не знаю, что это такое :

Цитата

вся из себя крутая додиезка


но мне ооочень понравилось!!! Теперь думаю, как бы это на немецкий перевести и в случае наездов начальника его т.о. культурно предупреждать Ага

А с этим OnCtlColor - тут есть ForeColorChanged(), но это тоже не спасает...
А как тут переписывать апи-шные функции, я еще не разобралась, хотя и крута до предела Ага
Мне тут сегодня надо было пару строк на мфц накропать, так я была счастлива до предела! Ага Все тебе понятно и ясно, никаких заморочек и т.д. Ага Господи, как мало человеку, однако, надо для счастья Ага
Записан

холоднокровней, Маня, Ви не на работе
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 04-05-2007 16:28 » 

Malaja, он намякивает на  # в названии языка наверное ))
Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 05-05-2007 11:20 » 

Цитата
А как тут переписывать апи-шные функции, я еще не разобралась, хотя и крута до предела
Используй PInvoke для вызова АПИ функции и не будет проблем. Пример
Код:
[dllImport("user32")]
public static extern int MessageBox(int hWnd, string pText, string pCaption, int uType);
« Последнее редактирование: 05-05-2007 11:23 от nikedeforest » Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #13 : 07-05-2007 09:00 » 

Ага, Леш, наверное Ага Но как нежно звучит! Ага

nikedeforest,
 
только не сильно бей за тупость!!! И если еще есть терпение, обьясни Ага
 
Я сделала, как ты написал, дабы посмотреть на результаты как пример.
Хм, какие интересные результаты:  :Улыбаюсь

теперь компилятор не хочет воспринимать все предыдущие вызовы типа MessageBox.Show("ой мама")... И как показать этому недогадливому орлу, где и что в реальности было вызвано (т.е. где апи-шный вызов, а где нет)?

Но я ж товарищ ищущий  Отлично Посему решила пойти другим путем и вызвать другую функцию для теста:
Код:
        using System.Runtime.InteropServices; 
[DllImport("user32")]
public static extern int LRESULT PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

И вот тут компилятор выругался так, что я даже не пойму, в какую сторону он меня послал  Быть такого не может - для строки

        public static extern int LRESULT PostMessage(...)

он подчеркнул имя функции и возопил ";eхpected"!
И что ему не нравится, хотелось бы мне знатъ?Не понял А черт его знает...
Правда, потом я обалдела еще больше, когда попробовала поискать user32.dll на компе - ее просто нет! Т.е. lib - пожалуйста, а вот dll - льки нет!!!  Не может быть...

Короче, что все это значит, я не понимаю... Может, кто-то знает?  Краснею




Записан

холоднокровней, Маня, Ви не на работе
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 08-05-2007 06:01 » 

Если у тебя происходит конфликт с функциями, уже используемыми, то переназови то, что ты импортируешь. Т.е. будет так
Код:
[DllImport("user32", ExactSpelling=true, EntryPoint = "MessageBox")]
public static extern int DspMsg(int hWnd, String pText, String pCaption, int uType);
Вызывать соответсвенно надо уже не MessageBox, а DspMsg.

По поводу второго. Первое что бросилось в глаза, это вот
Код:
int LRESULT PostMessage
Первый раз вижу функцию, которая может вернуть и int и LRESULT Улыбаюсь. Думаю надо определиться Улыбаюсь.
Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #15 : 08-05-2007 07:43 » 

Цитата
Думаю надо определиться .
упс...
мда, как говаривал мой одногруппник: "Головка бо-бо и денюжки тю-тю" Ага
Вечный побочный эффект от copy-paste, когда следишь за глобальными вещами и не видишь обычных очепяток. Я вчера еще час в инете искала причину ошибки! А потом не выдержала и задала вопрос! Пора в отпуск Ага

nikedeforest,

Огромное спасибочки за совет - все скомпилировалось и сработало! Я теперь хоть это уже знаю! Ага
Но вообще это же кошмар! Ведь от этого постоянного определения функций и констант в бейсике бежали, как от огня, а теперь пришли туда же... Воистину круговорот г... в природе Я зол!

Записан

холоднокровней, Маня, Ви не на работе
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #16 : 08-08-2007 07:01 » 

Если тема еще актуальна, то рассказываю:
У текстбокса в режиме ReadOnly цвет менять можно Улыбаюсь , но чтобы этого добиться надо предварительно в дизайн-тайме пошаманить, а именно: после того как отправили контрол в рид-онли, надо ручками поменять свойства BackColor и ForeColor, так чтобы эти цвета он перестал воспринимать дефолтными для контрола. Т.е. если нам нужно, чтобы фон остался цвета "Control" меняем его на другой и возвращаем обратно на "Control". Но теперь значение этого свойства уже будет написано жирным цветом, т.е. для контрола оно уже не дефолтное, и теперь все смены цветов будут работать нормально.
Записан
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #17 : 09-08-2007 09:42 » 

little,

Спасибочки!!! Я этого совета нигде не нашла, посему пришлось наследовать и переписывать онпайнт()... Как обычно - за незнание расплачиваешься тяжким трудом Ага
Теперь хоть знать буду!
Записан

холоднокровней, Маня, Ви не на работе
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines