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

При использовании свойства RightToLeft в listBox знак минус в отрицательном числе не с той стороны

15.06.2021, 14:59. Показов 1097. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты. Я только недавно начал изучать С#, поэтому я в нем полное дно, у меня есть большие проблемы с неймингом переменных и пониманием правил solid. Но меньше с тем.
Во избежание хейта сперва искал инфу в гугле, но наверно я либо слепой либо не верный вопрос задаю.
Решил создать первую свою прогу тестовый калькулятор в listBox
Вопрос 1: Кальк работает нормально, вроде отладил все исключения типа операций над такими вещами как "-," и тд, но когда я решил чтобы как привычно инвормация отображалась в правом угле listBox, поставил в свойствох RightToLeft - Yes, цифры отображаются корректно, но вот с отрицательным символом беда, он не с той стороны теперь, пример 12345-. Та же проблема вылезла с разделителем в дробных числах, пример ,12345. Когда RightToLeft - No такой проблемы нет
Вопрос 2: Как убрать при запуске программы выделение рамаки в первой строке listBox. При работе или при ннажатии кнопки очистки выделение пропадает. Оно есть только при старте, режет глаз.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace TestC
{
    public partial class Form1 : Form
    {
        private double firstValue;
        private double secondValue;
        private string value;
        private string negativeSign;
        private bool numberSeparatorSwitch;
        private bool mathSymbolSwitch;
        private bool mathEqualsSwitch;
        private string symbol;
        private double result;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }
 
        private void MathSybgolFlag() 
        {
            if (mathSymbolSwitch == false)
                listBox1.Items.Add(value);
            else
            {
                listBox1.Items.Add(firstValue);
                listBox1.Items.Add(symbol);
                listBox1.Items.Add(value);
            }
        }
 
        private void NumberButtonFlag(string button) 
        {
            if (mathEqualsSwitch == false)
            {
                listBox1.Items.Clear();
                value += button;
                MathSybgolFlag();
            }
        }
 
        private void MathOperatorFlag(string button) 
        {
            if (mathSymbolSwitch != true && value != "-" && value != "," && value != "-," && value != null && value != string.Empty)
            {
                symbol = button;
                mathSymbolSwitch = true;
                listBox1.Items.Add(button);
                firstValue = double.Parse(value);
                value = null;
                negativeSign = null;
                numberSeparatorSwitch = false;
            }
        }
 
        private void NegativeSign(string button) 
        {
            if (mathEqualsSwitch == false)
            {
                listBox1.Items.Clear();
                if (negativeSign != button)
                {
                    negativeSign = button;
                    value = negativeSign + value;
                    MathSybgolFlag();
                }
                else
                {
                    negativeSign = string.Empty;
                    value = value.Remove(0, 1);
                    MathSybgolFlag();
                }
            }
        }
 
        private void NumberSeparator(string button) 
        {
            if (mathEqualsSwitch == false && value != string.Empty && value != "-" && value != null)
            {
                listBox1.Items.Clear();
                if (numberSeparatorSwitch == false)
                {
                    value += button;
                    MathSybgolFlag();
                    numberSeparatorSwitch = true;
                }
                else
                    MathSybgolFlag();
            }
        }
 
        private void MathEquals(string button) 
        {
            if (mathSymbolSwitch == true && value != null && mathEqualsSwitch != true && value != "-" && value != "," && value != "-," && value != string.Empty)
            {
                listBox1.Items.Add(button);
                secondValue = double.Parse(value);
                if (symbol == "+")
                {
                    result = firstValue + secondValue;
                    listBox1.Items.Add(result);
                }
                else if (symbol == "-")
                {
                    result = firstValue - secondValue;
                    listBox1.Items.Add(result);
                }
                else if (symbol == "*")
                {
                    result = firstValue * secondValue;
                    listBox1.Items.Add(result);
                }
                else if (symbol == "/")
                {
                    if (secondValue != 0)
                    {
                        result = firstValue / secondValue;
                        listBox1.Items.Add(result);
                    }
                    else
                    {
                        result = 0;
                        listBox1.Items.Add("на 0 делить нельзя!");
                    }
                }
                value = string.Empty;
                mathEqualsSwitch = true;
            }
        }
 
        private void CalcClear() 
        {
            listBox1.Items.Clear();
            firstValue = 0;
            secondValue = 0;
            value = null;
            negativeSign = null;
            numberSeparatorSwitch = false;
            result = 0;
            mathSymbolSwitch = false;
            mathEqualsSwitch = false;
            symbol = null;
        }
 
        private void button1_Click(object sender, EventArgs e) => NumberButtonFlag("1");
 
        private void button2_Click(object sender, EventArgs e) => NumberButtonFlag("2");
 
        private void button3_Click(object sender, EventArgs e) => NumberButtonFlag("3");
 
        private void button4_Click(object sender, EventArgs e) => NumberButtonFlag("4");
 
        private void button5_Click(object sender, EventArgs e) => NumberButtonFlag("5");
 
        private void button6_Click(object sender, EventArgs e) => NumberButtonFlag("6");
 
        private void button7_Click(object sender, EventArgs e) => NumberButtonFlag("7");
 
        private void button8_Click(object sender, EventArgs e) => NumberButtonFlag("8");
 
        private void button9_Click(object sender, EventArgs e) => NumberButtonFlag("9");
 
        private void button10_Click(object sender, EventArgs e) => NumberButtonFlag("0");
 
        private void button11_Click(object sender, EventArgs e) => NegativeSign("-");
 
        private void button12_Click(object sender, EventArgs e) => NumberSeparator(",");
 
        private void button13_Click(object sender, EventArgs e) => MathEquals("=");
 
        private void button14_Click(object sender, EventArgs e) => CalcClear();
 
        private void button15_Click(object sender, EventArgs e) => MathOperatorFlag("+");
 
        private void button16_Click(object sender, EventArgs e) => MathOperatorFlag("-");
 
        private void button17_Click(object sender, EventArgs e) => MathOperatorFlag("*");
 
        private void button18_Click(object sender, EventArgs e) => MathOperatorFlag("/");
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2021, 14:59
Ответы с готовыми решениями:

Максимальная и минимальная цифра в отрицательном числе
Сама функция для определения макс и мин цифры в числе работает, но для положительных элементов. А у меня в массиве есть отрицательные. Кто...

Установить фокус ввода на первом отрицательном числе
Здравствуйте! По JS помощь очень нужна, задание элементарно: На странице имеется несколько текстбоксов, в которые вводятся числа. По кнопке...

Обработать событие OnKeyPress при вводе целого числа в Edit так, чтобы можно было вставить только один знак минус
помогите решить) Обработать событие OnKeyPress при вводе целого числа в Edit так, чтобы можно было вставить только один знак минус в...

4
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 5
16.06.2021, 15:01  [ТС]
Полазив на свежую голову по форуме, нашел решение сразу на 2 проблемы и не нужно никаких RightToLeft - yes юзать
Правда там было по центру текст, но я изменил TextFormatFlags.HorizontalCenter на TextFormatFlags.Right и исключения проверки if (e.Index > -1) небыло что приводило к ошибке, теперь все как мне нужно.
Жаль что я пока не понимаю этот код что я изменил. Почему это нельзя было в свойства констуктора добавить, тогда даже б такой новичек как я разобрался, ведь такой функционал востребован и часто нужен.
Вот что дописать нужно было:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public Form1()
        {
            InitializeComponent();
 
            listBox1.DrawMode = DrawMode.OwnerDrawFixed;
            listBox1.DrawItem += ListBox1_DrawItem;
        }
 
        private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index > -1)
                TextRenderer.DrawText(e.Graphics, listBox1.Items[e.Index].ToString(), e.Font, e.Bounds, e.ForeColor, e.BackColor, TextFormatFlags.Right);  
        }
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
16.06.2021, 15:56
Цитата Сообщение от devestation Посмотреть сообщение
RightToLeft
предназначенно для языков, которые пишутся с права на лево - арабский, иврит и т.д.
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 5
17.06.2021, 13:05  [ТС]
Цитата Сообщение от nedel Посмотреть сообщение
предназначенно для языков, которые пишутся с права на лево - арабский, иврит и т.д.
Да я понял, но вот что происходит тогда с цифрами и знаками. Цифры ведут себя как обычно слева на право, хотя я же их добавляю посимвольно в строку и должно их развернуть так же как с запятой и отрицательным знаком. Дичь какая то.
Пишу так и в переменной хранится так же:
-123,
А при использовании RightToLeft:
,123-
По лигике должно быть тогда так:
,321-
Ладно фиг с ним, с этим кривым языком, решение я сам нашел. Тему можно закрывать, так как никакого интереса нету лезть в кишки RightToLeft и разбираться что там говнокодеры-разрабы намудрили.
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
17.06.2021, 14:25
Цитата Сообщение от devestation Посмотреть сообщение
так как никакого интереса нету лезть в кишки RightToLeft и разбираться что там говнокодеры-разрабы намудрили.
Вот зря вы так - если вы чего-то не понимаете, это еще не значит, что это бред и говнокод
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2021, 14:25
Помогаю со студенческими работами здесь

Как сделать чтобы при премещении физикой перед был с той стороны в которую смотрит персонаж
У меня есть персонаж который крутится и нужно чтобы когда я нажимал вперёд он двигался в сторону в которую он смотрит. Использую я...

Положение блоков при использовании свойства vertical-align
Почему спускаться только на 3px <article> <div class="color1"></div> <div class="color2"></div> <div...

Ошибка при использовании ListBox
Всем привет. У меня возникла проблема при использовании ListBox'а в Rad Studio XE6. Когда я пробую выбрать какой-либо элемент из...

Знак минус в Textbox
Добрый вечер! Как преобразовать код, чтобы знак минус был только в начале введённых цифр и после символа E? private void...

Написать программу которая при использовании функции printf выводит на экране квадрат с длиной стороны n
Помогите Написать программу которая при помощи функции printf выводит на экране квадрат с длиной стороны n в виде символов «*». n...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru