Свойство размера нового класса текстового поля умножается на 1,5

#c# #winforms #class #textbox

Вопрос:

Я создал класс для своего собственного типа текстового поля под названием TextBoxUnderline. Класс наследует Систему.Windows.Формы.Текстовое поле. Однако, когда я устанавливаю размер TextBoxUnderline, он изменяется в 1,5 раза по сравнению с размером, когда я добавляю его в просмотр конструктора. Например, если я установлю Size = новый размер(100 100); и добавлю его в designerview, TextBoxUnderline получит размер 150 150.

Хотя, если я установлю MaximumSize = Размер(100,100); это хорошо работает. TextBoxUnderline получает размер 100 100. Однако я не хочу, чтобы значение по умолчанию MaximumSize было равно true.

Это мой код:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace XYZ
{
    class TextBoxUnderline : TextBox
    {
        public TextBoxUnderline()
        {
            this.BorderStyle = BorderStyle.None;
            this.AutoSize = false;
            this.BackColor = SystemColors.Control;
            this.Size = new Size(200, 200);
            //this.MaximumSize = new Size(200, 200);


            this.MouseEnter  = TextBoxUnderline_MouseEnter;
            this.MouseLeave  = TextBoxUnderline_MouseLeave;
            this.GotFocus  = TextBoxUnderline_GotFocus;
            this.LostFocus  = TextBoxUnderline_LostFocus;

            this.Controls.Add(new Label()
            { Height = 1, Dock = DockStyle.Bottom, BackColor = Color.Black });
        }

        void TextBoxUnderline_MouseLeave(object sender, EventArgs e)
        {
            if (((TextBoxUnderline)sender).Focused == false)
            {
                ((TextBoxUnderline)sender).BackColor = SystemColors.Control;
            }
        }

        void TextBoxUnderline_MouseEnter(object sender, EventArgs e)
        {
            ((TextBoxUnderline)sender).BackColor = Color.White;
        }

        private void TextBoxUnderline_LostFocus(object sender, EventArgs e)
        {
            ((TextBoxUnderline)sender).BackColor = SystemColors.Control;
        }

        private void TextBoxUnderline_GotFocus(object sender, EventArgs e)
        {
            ((TextBoxUnderline)sender).BackColor = Color.White;
        }
    }
}
 

Комментарии:

1. Установлено ли в настройках Windows масштабирование дисплея на 150%?

2. Вы проектируете в масштабе 100%? Visual Studio выдает предупреждение, когда вы этого не делаете. — Однако, если ваши формы масштабируются до шрифта, это все равно произойдет. Когда вы найдете машину, которая вот так масштабирует шрифт, то есть.

3. Масштабирование моего дисплея установлено на 150% из-за того, что я разрабатываю экран с диагональю 13 дюймов для 24 дюймов (короче говоря: протоколы безопасности компании превращают разработку на наших компьютерах в кошмар, я предпочитаю использовать свой персональный компьютер). Это решило проблему! Не могли бы вы, пожалуйста, ответить как решение, чтобы я мог отметить его как решенное?

Ответ №1:

Похоже, что масштабирование вашего дисплея установлено на 150% в настройках Windows. Вам нужно будет установить это значение на 100%, если вы хотите, чтобы пиксели на экране соответствовали размеру, указанному в вашем коде.