Перейти к содержимому

Как перекрасить пиксель формы в winforms

  • автор:

Как расположить форму и изменить ее размер (Windows Forms .NET)

При создании формы размер и расположение изначально задаются как значения по умолчанию. Размер формы по умолчанию обычно имеет ширину и высоту 800 x 500 пикселей. Начальное расположение, отображаемое при отображении формы, зависит от нескольких различных параметров.

Изменить размер формы можно во время разработки с помощью Visual Studio, а также во время выполнения с помощью кода.

Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.

Изменение размера с помощью конструктора

После добавления новой формы в проект размер формы задается двумя разными способами. Во-первых, для него можно задать маркеры изменения размера в конструкторе. Перетаскивая правый край, нижний край или угол, можно изменить размер формы.

Right click solution explorer to add new form to windows forms project with grips

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

Right click solution explorer to add new form to windows forms project

Изменение размера в коде

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

Чтобы изменить размер формы, измените свойство 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 содержит текущее положение в форме. Оба свойства можно задать с помощью конструктора.

visual studio properties pane with start position highlighted

Перечисление 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).

  1. При загрузке формы контроль выхода за пределы экрана происходит вне зависимости от значения свойства OutScreenControl (для корректного позиционирования формы при смене разрешения). При начальном отображении формы учитывается значение VisiblePercent , по умолчанию значение свойства VisiblePercent равно 40.
  2. Текущая реализация не учитывает наличие нескольких мониторов.

Запрет закрытия формы 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(); > > > 

Как получить цвет пикселя формы?

Author24 — интернет-сервис помощи студентам

Изменить цвет формы в цвет пикселя под курсором по клику мыши
Есть код. Но форма выкрашивается только в серый цвет и такой и остается, несмотря на изменение.

Получить цвет пикселя
Подскажите, как получить цвет пикселя. Везде приводятся такие примеры работы с 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 не существует в данном контексте

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *