Как расположить форму и изменить ее размер (Windows Forms .NET)
При создании формы размер и расположение изначально задаются как значения по умолчанию. Размер формы по умолчанию обычно имеет ширину и высоту 800 x 500 пикселей. Начальное расположение, отображаемое при отображении формы, зависит от нескольких различных параметров.
Изменить размер формы можно во время разработки с помощью Visual Studio, а также во время выполнения с помощью кода.
Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.
Изменение размера с помощью конструктора
После добавления новой формы в проект размер формы задается двумя разными способами. Во-первых, для него можно задать маркеры изменения размера в конструкторе. Перетаскивая правый край, нижний край или угол, можно изменить размер формы.

Второй способ изменения размера формы — в конструкторе на панели «Свойства». Выберите форму, а затем найдите панель Свойства в Visual Studio. Прокрутите вниз до раздела Размер и разверните его. Можно вручную задать параметры Ширина и Высота.

Изменение размера в коде
Несмотря на то, что начальный размер формы задается в конструкторе, его можно изменить с помощью кода. Использование кода для изменения размера формы полезно, когда в каком-либо приложении размера формы по умолчанию недостаточно.
Чтобы изменить размер формы, измените свойство Size, которое представляет ширину и высоту формы.
Изменение размера текущей формы
Размер текущей формы можно изменить, пока код выполняется в контексте формы. Например, если имеется Form1 с кнопкой, то при нажатии на нее вызывается обработчик событий Click для изменения размера формы:
private void button1_Click(object sender, EventArgs e) => Size = new Size(250, 200);
Private Sub Button1_Click(sender As Object, e As EventArgs) Size = New Drawing.Size(250, 200) End Sub
Изменение размера другой формы
Размер другой формы можно изменить после ее создания с помощью переменной, ссылающейся на форму. Например, предположим, что у вас есть две формы: Form1 (начальная форма в этом примере) и Form2 . В Form1 имеется кнопка, которая при нажатии вызывает событие Click . Обработчик этого события создает новый экземпляр формы Form2 , задает размер, а затем отображает его:
private void button1_Click(object sender, EventArgs e)
Private Sub Button1_Click(sender As Object, e As EventArgs) Dim form = New Form2 With < .Size = New Drawing.Size(250, 200) >form.Show() End Sub
Если свойство Size не задано вручную, размер формы по умолчанию — это размер, заданный во время разработки.
Расположение с помощью конструктора
При создании и отображении экземпляра формы начальное расположение формы определяется свойством StartPosition. Свойство Location содержит текущее положение в форме. Оба свойства можно задать с помощью конструктора.

| Перечисление FormStartPosition | Description |
|---|---|
| CenterParent | Форма находится в пределах родительской формы. |
| CenterScreen | Форма располагается по центру текущего экрана. |
| Вручную | Положение формы определяется свойством Расположение. |
| WindowsDefaultBounds | Форма размещается в расположении Windows по умолчанию и ее размер подгоняется под размер по умолчанию, который определен Windows. |
| WindowsDefaultLocation | Форма размещается в расположении Windows по умолчанию и не изменяется. |
Значение CenterParent работает только с формами, которые являются либо дочерними формами многодокументного интерфейса (MDI), либо обычными формами, отображаемыми с помощью метода ShowDialog. CenterParent не влияет на обычную форму, которая отображается с помощью метода Show. Чтобы разместить форму по центру (переменная form ) другой формы (переменная parentForm ), используйте следующий код:
form.StartPosition = FormStartPosition.Manual; form.Location = new Point(parentForm.Width / 2 - form.Width / 2 + parentForm.Location.X, parentForm.Height / 2 - form.Height / 2 + parentForm.Location.Y); form.Show();
form.StartPosition = Windows.Forms.FormStartPosition.CenterParent.Manual form.Location = New Drawing.Point(parentForm.Width / 2 - form.Width / 2 + parentForm.Location.X, parentForm.Height / 2 - form.Height / 2 + parentForm.Location.Y) form.Show()
Расположение с помощью кода
Несмотря на то, что для задания начального расположения формы можно использовать конструктор, изменить режим начальной позиции или задать расположение вручную можно с помощью кода. Использование кода для расположения формы полезно, если необходимо вручную разместить форму и изменить ее размер относительно экрана или других форм.
Перемещение текущей формы
Переместить текущую форму можно, пока код выполняется в контексте формы. Например, если имеется Form1 с кнопкой, то при нажатии на нее вызывается обработчик событий Click . Обработчик в этом примере изменяет расположение формы на верхнюю левую часть экрана путем задания свойства Location:
private void button1_Click(object sender, EventArgs e) => Location = new Point(0, 0);
Private Sub Button1_Click(sender As Object, e As EventArgs) Location = New Drawing.Point(0, 0) End Sub
Расположение другой формы
Расположение другой формы можно изменить после ее создания с помощью переменной, ссылающейся на форму. Например, предположим, что у вас есть две формы: Form1 (начальная форма в этом примере) и Form2 . В Form1 имеется кнопка, которая при нажатии вызывает событие Click . Обработчик этого события создает новый экземпляр Form2 формы и задает расположение:
private void button1_Click(object sender, EventArgs e)
Private Sub Button1_Click(sender As Object, e As EventArgs) Dim form = New Form2 With < .Location = New Drawing.Point(0, 0) >form.Show() End Sub
Если значение Location не задано, позиция формы по умолчанию основана на том, что StartPosition свойство было задано во время разработки.
См. также
- Как добавить форму в проект (Windows Forms .NET)
- Общие сведения о событиях (Windows Forms .NET)
- Размещение и компоновка элементов управления (Windows Forms .NET)
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Особенности форм в Windows-приложениях
Существует ряд особенностей, которые характерны как для форм редактирования, так и для списковых форм Windows-приложений.
Единообразная обработка всех форм приложения
Чтобы единообразно обработать все формы приложения, нужно подписаться на глобальные события.
В методе Main можно подписаться на специальное событие:
static void Main() . // *** Start programmer edit section *** (Детейломания Main()) ICSSoft.STORMNET.Windows.Forms.WinApplication.SetUICultureAsRussian(); ICSSoft.STORMNET.Windows.Forms.Desktop.GlobalWinformEvents.Load += new EventHandler(GlobalWinformEvents_Load); // *** End programmer edit section *** (Детейломания Main()) ICSSoft.STORMNET.Business.LockService.ClearAllUserLocks(); . >
В обработчик этого события будет приходить форма в переменной sender. Далее, например, можно все формы подписать на нажатие определённых клавиш:
// *** Start programmer edit section *** (ДетейломанияDesktop CustomMembers) static void GlobalWinformEvents_Load(object sender, EventArgs e) ((Form)sender).KeyPreview = true; ((Form)sender).KeyPress += new KeyPressEventHandler(ДетейломанияDesktop_KeyPress); > static void ДетейломанияDesktop_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar == 13) MessageBox.Show("Enter was pressed","Hello"); > > // *** End programmer edit section *** (ДетейломанияDesktop CustomMembers)
Реализация интерфейсов независимыми и зависимыми формами и отношения между ними
Диаграмма классов, представленная ниже, показывает, как относятся между собой независимые и зависимые формы списков, универсальные, а также реализуемые на основе базовых конкретные формы списков (могут реализовываться как вручную, так и посредством генераторов кода для Flexberry ):

Диаграмма, представленная ниже, показывает, как относятся между собой независимые и зависимые формы редактирования, универсальные, а также базовые и конкретные на основе базовых формы (могут реализовываться как вручную, так и посредством генераторов кода для Flexberry ):

Положение формы на экране
В некоторых случаях восстоновление положения формы приводило к тому, что форма не была видна на экране. Такая ситуация, например, возникает при смене разрешения монитора на более низкое: при новом разрешении форма могла оказаться за пределами видимой области.
Для управления положением формы в Flexberry Platform в класс BaseWin , являющийся базовым для всех форм, были добавлены два свойства OutScreenControl и VisiblePercent .
Свойство OutScreenControl позволяет включить контроль выхода окна за пределы экрана в процессе перемещения окна пользователем. Свойство VisiblePercent устанавливает процент размера формы (длины/ширины), который должен оставаться видимым (диапазон значений от 0 до 100).
- При загрузке формы контроль выхода за пределы экрана происходит вне зависимости от значения свойства OutScreenControl (для корректного позиционирования формы при смене разрешения). При начальном отображении формы учитывается значение VisiblePercent , по умолчанию значение свойства VisiblePercent равно 40.
- Текущая реализация не учитывает наличие нескольких мониторов.
Запрет закрытия формы Flexberry Winforms
Для того чтобы запретить закрытие формы, надо переопределить метод Finalize() независимой формы.
[Scriptizer.RunTime.ScriptFinalizer] public override bool Finalize() return false; >
Закрытие всех открытых форм
Чтобы закрыть все открытые формы приложения, как происходит при закрытии главного окна приложения Flexberry, можно использовать следующий код.
var coll = desktopCtrl2.PathRunners; foreach (ArrayList runList in coll.GetAllValues()) foreach (Runner run in runList) if (run.Alive) run.Stop(); > > >
Как получить цвет пикселя формы?

Изменить цвет формы в цвет пикселя под курсором по клику мыши
Есть код. Но форма выкрашивается только в серый цвет и такой и остается, несмотря на изменение.
Получить цвет пикселя
Подскажите, как получить цвет пикселя. Везде приводятся такие примеры работы с GetPixel: Bitmap.
Как изменить цвет пикселя на картинке в pictureBox
Как изменить цвет определенного пикселя на картинке в pictureBox?
8937 / 4849 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246

Сообщение было отмечено Heng как решение
Решение
1 2 3 4 5
void Form1_MouseClick(object sender, MouseEventArgs e) { Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height); this.DrawToBitmap(bmp, new Rectangle(this.ClientRectangle.Location, this.ClientSize)); MessageBox.Show(string.Format("Цвет пиксела: ", bmp.GetPixel(e.X, e.Y).ToString())); }
Регистрация: 02.10.2013
Сообщений: 96
Ой как сложно ! но логично, спасибо .
Добавлено через 7 минут
А если рисовать на форме, то этот код не подходит ??
Добавлено через 2 минуты
Он выдает мне белый цвет на месте где черная линия нарисована
Добавлено через 24 минуты
Рисую на форме вот так
1 2 3 4 5 6 7 8 9 10 11
Graphics g = this.CreateGraphics(); Pen p = new Pen(Color.Black,10); Random r = new Random(); Kol_Ver = r.Next(3,6); Point[] Points = new Point[Kol_Ver]; for (int i = 0; i Kol_Ver; i++) { Points[i].X = r.Next(1, this.Width - 50); ; // x координата Points[i].Y = r.Next(1, this.Height - 50); ; // y координата } g.DrawPolygon(p, Points);
Добавлено через 1 час 35 минут
И вообще как можно сравнить 2 пиксела ?
я пробую вот так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Graphics G = Graphics.FromImage(bmp); Graphics G2 = this.CreateGraphics(); Pen p = new Pen(Color.Blue, 2); int y = 1; while (y != bmp.Height - 10) { bool F = true; for (int x = 1; x bmp.Width - 10; x++) { if (F== true) G.DrawRectangle(p, x, y, 1, 1); if (bmp.GetPixel(x + 1, y) != bmp.GetPixel(x, y)) F = false; if (bmp.GetPixel(x - 1, y) != bmp.GetPixel(x, y)) F = true; G2.DrawImage(bmp, 0, 0); } y++; }
и ничего не выходит
Добавлено через 2 часа 49 минут
Я пытаюсь реализовать алгоритм заливки !
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как по указанным координатам проверить цвет пикселя?
Как по указанным координатам проверить цвет пикселя, проверка должна идти в браузере. Помогите.
Как узнать цвет пикселя изображения в PictureBox
Всем привет:) Штука такая. грзим изображение (в pictureBox). Как узнать цвет определённого.
Цвет пикселя
Как получить цвет пикселя, находящегося в данный момент под курсором в C# и отобразить каналы R G B.

Цвет пикселя
Мне нужно методом сканирующей строки закрасить фигуру. Я нарисовала фигуру. Пытаюсь найти контур.
Или воспользуйтесь поиском по форуму:
Как поменять цвет форм в c#?
Есть основная форма, то есть меню моей программы. Создал две кнопки, отвечающие за тему программы, темная или светлая. this.BackColor = Color.DarkSlateGray; работает только для первой формы. Как мне можно реализовать смену цвета Form2, чтобы когда я открыл её, цвет был другой. В button_click добавил вот такой код
F[1].BackColor = Color.FromName("DarkSlateGray");//Меняем цвет в шифровке F[1].Controls["button1"].BackColor = Color.FromName("DarkSlateBlue");//главная форма в этой коллекции первая, ее индекс 0, меняем ее цвет F[2].BackColor = Color.FromName("DarkSlateGray");//главная форма в этой коллекции первая, ее индекс 0, меняем ее цвет
Но он меняет цвет только когда форма 1 и 2 открыты, а я хочу чтобы когда я открыл Form1 или Form2 сразу был другой цвет, измененный ранее по нажатию кнопки
Отслеживать
user206435
задан 22 мар 2021 в 19:54
13 5 5 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Просто как вариант — кнопки меняют режим bool isDarkMode на true или false, а при загрузке формы проверяется установлен тёмный режим или светлый
void Button1_Click(object sender, EventArgs e) < isDarkMode = true; Form1.BackColor = Color.FromName("DarkSlateGray"); Form1.Controls["button1"].BackColor = Color.FromName("DarkSlateBlue"); Form2.BackColor = Color.FromName("DarkSlateGray"); >void Button2_Click(object sender, EventArgs e) < isDarkMode = false; Form1.BackColor = Color.FromName("LightGray"); Form1.Controls["button1"].BackColor = Color.FromName("LightGray"); Form2.BackColor = Color.FromName("LightGray"); >void Form2_Load(object sender, EventArgs e) < if (isDarkMode) < Form2.BackColor = Color.FromName("DarkSlateGray"); >>
Отслеживать
ответ дан 22 мар 2021 в 20:20
453 2 2 серебряных знака 17 17 бронзовых знаков
void Form2_Load(object sender, EventArgs e) < if (isDarkMode) < Form2.BackColor = Color.FromName("DarkSlateGray"); >> надо вставлять же во вторую форму? Потому что, вылезает ошибка что isDarkMode не существует в данном контексте