Malaja
|
|
« : 02-05-2007 15:51 » |
|
Господа, опять я с дурными вопросами : есть форма, на ней - TextBox (там высвечиваются цифры). Я хочу при определенных условиях изменить цвет выводимого в нем текста: например, если число отрицательное, то цвет - красный, иначе - черный. Можно ли это сделать, не перегружая TextBox, а используя OnPaint() своей формы? (у меня не вышло ) Заранее спасибочки!
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
nikedeforest
|
|
« Ответ #1 : 02-05-2007 17:58 » |
|
TextBox.ForeColor
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Malaja
|
|
« Ответ #2 : 03-05-2007 08:06 » |
|
nikedeforest, попробовала изначально как самый простой вариант - фигушки... Т.е. все еще интересней - если у контрола ReadOnly = false, тогда все работает, как и полагается (но я это определила только сегодня, когда увидела, что ты тоже про TextBox.ForeColor написал). А вот если у него ReadOnly = true, тогда ничего не работает... Но какая ему разница
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Malaja
|
|
« Ответ #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();
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #5 : 03-05-2007 13:10 » |
|
Мда, тогда точно нет счастья в жизни Или жизнь какая-то не такая, или законы природы Короче, пора что-то поменять Джон, спасибочки за инфу - тогда я прекращаю копать в этом направлении и искать что-либо еще.
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Malaja
|
|
« Ответ #6 : 04-05-2007 09:11 » |
|
nikedeforest, и ты таки прав Кстати, инфу о том, что сия затея ничем, кроме потери времени, не увенчается, я нашла именно на каком-то форуме! МСДН же молчит, аки русский партизан...
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #8 : 04-05-2007 13:07 » |
|
Джон, пока что начальник этого хочет, а точнее, это было первое, что я ему предложила Может, когда он увидит результат, он захочет другого Но для этого сначала ему надо показать то, что получилось. А насчет проще - тут я не уверена, т.к. при ReadOnly = true вообще никакие цветовые изменения без перегрузки класса не прокатывают. Просто в плане наглядности это может выглядеть значительно лучше. Или я опять что-то пропустила мимо ушей?
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #10 : 04-05-2007 16:02 » |
|
Джон, я пока не знаю, что это такое : вся из себя крутая додиезка
но мне ооочень понравилось!!! Теперь думаю, как бы это на немецкий перевести и в случае наездов начальника его т.о. культурно предупреждать А с этим OnCtlColor - тут есть ForeColorChanged(), но это тоже не спасает... А как тут переписывать апи-шные функции, я еще не разобралась, хотя и крута до предела Мне тут сегодня надо было пару строк на мфц накропать, так я была счастлива до предела! Все тебе понятно и ясно, никаких заморочек и т.д. Господи, как мало человеку, однако, надо для счастья
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 04-05-2007 16:28 » |
|
Malaja, он намякивает на # в названии языка наверное ))
|
|
|
Записан
|
|
|
|
nikedeforest
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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 . Думаю надо определиться .
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Malaja
|
|
« Ответ #15 : 08-05-2007 07:43 » |
|
Думаю надо определиться .
упс... мда, как говаривал мой одногруппник: "Головка бо-бо и денюжки тю-тю" Вечный побочный эффект от copy-paste, когда следишь за глобальными вещами и не видишь обычных очепяток. Я вчера еще час в инете искала причину ошибки! А потом не выдержала и задала вопрос! Пора в отпуск nikedeforest, Огромное спасибочки за совет - все скомпилировалось и сработало! Я теперь хоть это уже знаю! Но вообще это же кошмар! Ведь от этого постоянного определения функций и констант в бейсике бежали, как от огня, а теперь пришли туда же... Воистину круговорот г... в природе
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
little
|
|
« Ответ #16 : 08-08-2007 07:01 » |
|
Если тема еще актуальна, то рассказываю: У текстбокса в режиме ReadOnly цвет менять можно , но чтобы этого добиться надо предварительно в дизайн-тайме пошаманить, а именно: после того как отправили контрол в рид-онли, надо ручками поменять свойства BackColor и ForeColor, так чтобы эти цвета он перестал воспринимать дефолтными для контрола. Т.е. если нам нужно, чтобы фон остался цвета "Control" меняем его на другой и возвращаем обратно на "Control". Но теперь значение этого свойства уже будет написано жирным цветом, т.е. для контрола оно уже не дефолтное, и теперь все смены цветов будут работать нормально.
|
|
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #17 : 09-08-2007 09:42 » |
|
little, Спасибочки!!! Я этого совета нигде не нашла, посему пришлось наследовать и переписывать онпайнт()... Как обычно - за незнание расплачиваешься тяжким трудом Теперь хоть знать буду!
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
|