C масштабирование windows form

Содержание
  1. Программирование на C, C# и Java
  2. Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
  3. Растянуть элементы на форме Windows Forms
  4. Как растянуть элементы на форме Windows Forms
  5. Практическое руководство. Обрезка и масштабирование изображений How to: Crop and Scale Images
  6. Пример Example
  7. Масштабирование элементов на форме при изменение размера окна
  8. Изменение размера элементов формы при ее ресайзе
  9. Масштабирование элемента управления DataGridView в Windows Forms Best Practices for Scaling the Windows Forms DataGridView Control
  10. Эффективное использование стилей ячеек Using Cell Styles Efficiently
  11. Эффективное использование контекстных меню Using Shortcut Menus Efficiently
  12. Эффективное использование автоматического изменения размера Using Automatic Resizing Efficiently
  13. Эффективное использование коллекций выбранных ячеек, строк и столбцов Using the Selected Cells, Rows, and Columns Collections Efficiently
  14. Использование общих строк Using Shared Rows
  15. Предотвращение недоступности строк Preventing Rows from Becoming Unshared

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Растянуть элементы на форме Windows Forms

В статье рассмотрим способ создания “резинового” интерфейса в формах Windows Forms и разберёмся, как растянуть элементы на форме при изменении размера окна программы.

Создадим в Visual Studio проект Windows Forms и разместим на форме следующие элементы управления:

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

Видим, что окно формы увеличилось в размере, но элементы управления никак не реагируют на данные изменения.

Теперь покажем, как создать адаптивный к изменениям размера окна интерфейс на форме Windows Forms.

Как растянуть элементы на форме Windows Forms

Для создания “резинового” интерфейса нужно воспользоваться свойствами элементов управления из категории Макет (Layout). А конкретно свойством Anchor.

В Windows Forms свойство Anchor определяет стороны контейнера (Top, Bottom, Left, Right) к которым привязывается элемент управления. При изменении размера контейнера расстояние между указанной стороной контейнера и ближайшей к ней стороне элемента управления остаётся неизменным.

Таким образом можно добиться растягивания и перемещения элементов в форме при изменении её размера.

В нашем случае контейнером для элементов управления является всё окно.

Зададим для TextBox значение атрибута Anchor = Top, Left, Right. Теперь расстояние между соответствующими сторонами ТекстБокса и окна будет неизменным. Так мы добьёмся изменения ширины контрола при изменении ширины окна.

Для RichTextBox значение свойства Anchor сделаем равным Top, Bottom, Left, Right.

У кнопки Button установим Anchor, как Top, Right.

Теперь запустим программу и изменим размер окна: увидим, что элементы управления на форме растягиваются и меняют своё местоположение. Теперь интерфейс стал адаптированным к изменению размера окна.

Есть ещё один момент. Когда мы будем уменьшать мышью размер формы – контролы будут скрываться из поля зрения.

Чтобы решить данную проблему, необходимо указать минимальный размер формы Windows Form в пикселях. Тем самым форму будет невозможно сделать меньше установленного размера.

Щёлкнем по форме и в окне свойств изменим параметр MinimunSize. Установим его равным текущему размеру формы в визуальном редакторе (Size).

Минимальный размер можно указать и меньшим – таким, при котором интерфейс хорошо выглядит и сохраняет свою функциональность. Нужные значения определяются экспериментально – для этого самостоятельно изменяйте размер формы.

Практическое руководство. Обрезка и масштабирование изображений How to: Crop and Scale Images

GraphicsКласс предоставляет несколько DrawImage методов, некоторые из которых имеют параметры исходного и целевого прямоугольника, которые можно использовать для кадрирования и масштабирования изображений. The Graphics class provides several DrawImage methods, some of which have source and destination rectangle parameters that you can use to crop and scale images.

Пример Example

В следующем примере объект создается на Image основе файла на диске Apple.gif. The following example constructs an Image object from the disk file Apple.gif. Код рисует все изображение Apple в исходном размере. The code draws the entire apple image in its original size. Затем код вызывает DrawImage метод Graphics объекта для рисования части изображения Apple в прямоугольнике назначения, который больше исходного изображения Apple. The code then calls the DrawImage method of a Graphics object to draw a portion of the apple image in a destination rectangle that is larger than the original apple image.

DrawImageМетод определяет, какая часть Apple будет рисовать, просматривая исходный прямоугольник, который задается третьим, четвертым, пятый и шестым аргументами. The DrawImage method determines which portion of the apple to draw by looking at the source rectangle, which is specified by the third, fourth, fifth, and sixth arguments. В этом случае Apple обрезается до 75 процентов от его ширины и 75 процентов от высоты. In this case, the apple is cropped to 75 percent of its width and 75 percent of its height.

DrawImageМетод определяет, где следует нарисовать обрезанный Apple и насколько велик для кадрирования Apple, просматривая прямоугольник назначения, который задается вторым аргументом. The DrawImage method determines where to draw the cropped apple and how big to make the cropped apple by looking at the destination rectangle, which is specified by the second argument. В этом случае размер прямоугольника назначения составляет 30%, а высота составляет 30 процентов от исходного изображения. In this case, the destination rectangle is 30 percent wider and 30 percent taller than the original image.

На следующем рисунке показан исходный Apple и масштабированный, обрезанный Apple. The following illustration shows the original apple and the scaled, cropped apple.

Масштабирование элементов на форме при изменение размера окна

Пропорциональное масштабирование элементов при изменении размера окна
Подскажите, как сделать так чтобы при изменении размеров окна пропорционально масштабировались.

Qml изменение размера Canvas при изменении размера окна
Может есть какой нибудь способ, чтобы при изменении размера окна (в моем случае window) изменялся.

Изменение размера обьектов при изменении размера графического окна
Можно ли в pascalABC.net сделать следующее: чтобы приизменении размера графического окна изменялись.

Изменение размера элементов на форме
Приветствую. Есть форма. На форме есть ЛистБокс и ВебБраузер. Как мне сделать так, чтобы их.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Необработанное исключение при изменение размера окна
Если долго менять размер у окна, то минут через 5 вылезет необработанное исключение, окно зависает.

Изменение Форм при изменении размера окна
Доброй ночи Подскажите пожалуйста как правильно реализовать изменение (положение) форм и элементов.

При изменение размера окна меню трансформируется
Когда изменяю размер окна меню трансформируется. Благодарю за помощь. #block1

Изменение размера элементов формы при ее ресайзе

Изменение размеров компонентов при ресайзе формы
Добрый день. Использую WinForms в приложении. Возникла проблема: при разворачивании формы.

Масштабирование элементов формы при ее ресайзе
Проблема в следующем: необходимо настроить изменение размеров элементов согласно размеров окна и.

Изменение размеров компонентов при ресайзе формы («резиновый» интерфейс)
Здравствуйте программисты, суть вопроса така: На форме есть разные компоненты speed button, label и.

Пропорциональное изменение размера tabControl1 при изменении размера формы
Всем hello. Посоветуйте, что сделать. На форме есть компоненты, делаю, чтобы при изменении.

Anchor, Dock, или к событию Resize() привязывайте.

есть еще FlowLayoutPanel

Anchor, Dock, или к событию Resize() привязывайте.

есть еще FlowLayoutPanel

Anchor подошел только для tabpage,button, textbox делаются просто нереальных размеров, остается их крепить к какому-то краю, что не очень то подходит
к событию Resize — это каждый баттон/текстбокс/лейбл вручную переписывать размер?

Вложения

sourceCode.zip (13.3 Кб, 200 просмотров)

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Читайте также:  Как установить windows media player для windows 10

Изменение размера Формы при FormBorderStyle = None
Доброго времени суток. Побаловавшись со свойством FormBorderStyle = None и найдя код, при котором.

Изменение размера Формы при FormBorderStyle = None
Приветствую. Есть форма с FormBorderStyle = None, теперь появилась задача как изменять размер.

Запрет изменения размера формы и элементов при изменении шрифта и его размера
Здравствуйте. К слову вопрос название темы. А именно как запретить изменять размер формы и.

Автоматическое изменение размера формы с сохранением пропорций элементов
Здравствуйте! Нужна помощь, есть программа с большим количеством форм. Все формы в ней FixedSingle.

Масштабирование элемента управления DataGridView в Windows Forms Best Practices for Scaling the Windows Forms DataGridView Control

DataGridViewЭлемент управления предназначен для обеспечения максимальной масштабируемости. The DataGridView control is designed to provide maximum scalability. Если требуется отображать большие объемы данных, следуйте рекомендациям, описанным в этом разделе, чтобы избежать чрезмерного использования памяти или снижения скорости реагирования пользовательского интерфейса. If you need to display large amounts of data, you should follow the guidelines described in this topic to avoid consuming large amounts of memory or degrading the responsiveness of the user interface (UI). В этом разделе обсуждаются следующие проблемы. This topic discusses the following issues:

Эффективное использование стилей ячеек Using cell styles efficiently

Эффективное использование контекстных меню Using shortcut menus efficiently

Эффективное использование автоматического изменения размера Using automatic resizing efficiently

Эффективное использование коллекций выбранных ячеек, строк и столбцов Using the selected cells, rows, and columns collections efficiently

Использование общих строк Using shared rows

Предотвращение недоступности строк Preventing rows from becoming unshared

При наличии особых потребностей в производительности можно реализовать виртуальный режим и предоставить собственные операции управления данными. If you have special performance needs, you can implement virtual mode and provide your own data management operations. Дополнительные сведения см. в разделе Режимы вывода данных в элементе управления Windows Forms DataGridView. For more information, see Data Display Modes in the Windows Forms DataGridView Control.

Эффективное использование стилей ячеек Using Cell Styles Efficiently

Каждая ячейка, строка и столбец могут иметь свои собственные сведения о стиле. Each cell, row, and column can have its own style information. Сведения о стиле хранятся в DataGridViewCellStyle объектах. Style information is stored in DataGridViewCellStyle objects. Создание объектов стиля ячейки для многих отдельных DataGridView элементов может оказаться неэффективным, особенно при работе с большими объемами данных. Creating cell style objects for many individual DataGridView elements can be inefficient, especially when working with large amounts of data. Чтобы избежать снижения производительности, используйте следующие рекомендации. To avoid a performance impact, use the following guidelines:

Избегайте задания свойств стиля ячейки для отдельных DataGridViewCell DataGridViewRow объектов или. Avoid setting cell style properties for individual DataGridViewCell or DataGridViewRow objects. Сюда входит объект Row, заданный RowTemplate свойством. This includes the row object specified by the RowTemplate property. Каждая новая строка, клонированная из шаблона строки, получит собственную копию объекта стиля ячейки шаблона. Each new row that is cloned from the row template will receive its own copy of the template’s cell style object. Для максимальной масштабируемости установите свойства стиля ячейки на DataGridView уровне. For maximum scalability, set cell style properties at the DataGridView level. Например, задайте свойство, DataGridView.DefaultCellStyle а не DataGridViewCell.Style свойство. For example, set the DataGridView.DefaultCellStyle property rather than the DataGridViewCell.Style property.

Если для некоторых ячеек требуется форматирование, отличное от форматирования по умолчанию, используйте один и тот же DataGridViewCellStyle экземпляр в группах ячеек, строк или столбцов. If some cells require formatting other than default formatting, use the same DataGridViewCellStyle instance across groups of cells, rows, or columns. Избегайте непосредственного задания свойств типа DataGridViewCellStyle в отдельных ячейках, строках и столбцах. Avoid directly setting properties of type DataGridViewCellStyle on individual cells, rows, and columns. Пример общего доступа к стилю ячейки см. в разделе как задать стили ячеек по умолчанию для элемента управления Windows Forms DataGridView. For an example of cell style sharing, see How to: Set Default Cell Styles for the Windows Forms DataGridView Control. Можно также избежать снижения производительности при настройке стилей ячеек по отдельности, обрабатывая CellFormatting обработчик событий. You can also avoid a performance penalty when setting cell styles individually by handling the CellFormatting event handler. Пример см. в разделе руководство. Настройка форматирования данных в элементе управления Windows Forms DataGridView. For an example, see How to: Customize Data Formatting in the Windows Forms DataGridView Control.

При определении стиля ячейки используйте DataGridViewCell.InheritedStyle свойство, а не DataGridViewCell.Style свойство. When determining a cell’s style, use the DataGridViewCell.InheritedStyle property rather than the DataGridViewCell.Style property. При доступе к Style свойству создается новый экземпляр DataGridViewCellStyle класса, если свойство еще не было использовано. Accessing the Style property creates a new instance of the DataGridViewCellStyle class if the property has not already been used. Кроме того, этот объект может не содержать полные сведения о стиле для ячейки, если некоторые стили наследуются от строки, столбца или элемента управления. Additionally, this object might not contain the complete style information for the cell if some styles are inherited from the row, column, or control. Дополнительные сведения о наследовании стилей ячеек см. в разделе Стили ячеек в элементе управления Windows Forms DataGridView. For more information about cell style inheritance, see Cell Styles in the Windows Forms DataGridView Control.

Эффективное использование контекстных меню Using Shortcut Menus Efficiently

Каждая ячейка, строка и столбец могут иметь собственное контекстное меню. Each cell, row, and column can have its own shortcut menu. Контекстные меню в DataGridView элементе управления представлены ContextMenuStrip элементами управления. Shortcut menus in the DataGridView control are represented by ContextMenuStrip controls. Как и объекты стиля ячейки, создание контекстных меню для многих отдельных DataGridView элементов отрицательно сказывается на производительности. Just as with cell style objects, creating shortcut menus for many individual DataGridView elements will negatively impact performance. Чтобы избежать этого снижения, используйте следующие рекомендации. To avoid this penalty, use the following guidelines:

Избегайте создания контекстных меню для отдельных ячеек и строк. Avoid creating shortcut menus for individual cells and rows. К ним относится шаблон строки, который клонируется вместе с контекстным меню при добавлении новых строк к элементу управления. This includes the row template, which is cloned along with its shortcut menu when new rows are added to the control. Для максимальной масштабируемости используйте только свойство элемента управления, ContextMenuStrip чтобы указать одно контекстное меню для всего элемента управления. For maximum scalability, use only the control’s ContextMenuStrip property to specify a single shortcut menu for the entire control.

Если требуется несколько контекстных меню для нескольких строк или ячеек, обрабатывайте CellContextMenuStripNeeded RowContextMenuStripNeeded события или. If you require multiple shortcut menus for multiple rows or cells, handle the CellContextMenuStripNeeded or RowContextMenuStripNeeded events. Эти события позволяют самостоятельно управлять объектами контекстного меню, что позволяет настраивать производительность. These events let you manage the shortcut menu objects yourself, allowing you to tune performance.

Эффективное использование автоматического изменения размера Using Automatic Resizing Efficiently

Размер строк, столбцов и заголовков может изменяться автоматически по мере изменения содержимого ячейки, чтобы все содержимое ячеек отображалось без усечения. Rows, columns, and headers can be automatically resized as cell content changes so that the entire contents of cells are displayed without clipping. Изменение режима изменения размеров может также изменить размер строк, столбцов и заголовков. Changing sizing modes can also resize rows, columns, and headers. Чтобы определить правильный размер, DataGridView элемент управления должен проверить значение каждой ячейки, которую он должен разместить. To determine the correct size, the DataGridView control must examine the value of each cell that it must accommodate. При работе с большими наборами данных этот анализ может негативно сказаться на производительности элемента управления, когда происходит автоматическое изменение размера. When working with large data sets, this analysis can negatively impact the performance of the control when automatic resizing occurs. Чтобы избежать снижения производительности, используйте следующие рекомендации. To avoid performance penalties, use the following guidelines:

Читайте также:  Skinpacks для windows 10

Старайтесь не использовать автоматическое изменение размера DataGridView элемента управления с большим набором строк. Avoid using automatic sizing on a DataGridView control with a large set of rows. Если вы используете автоматическое изменение размера, измените размер только на основе отображаемых строк. If you do use automatic sizing, only resize based on the displayed rows. Также используйте только отображаемые строки в виртуальном режиме. Use only the displayed rows in virtual mode as well.

Для строк и столбцов используйте DisplayedCells поле или для DisplayedCellsExceptHeaders DataGridViewAutoSizeRowsMode DataGridViewAutoSizeColumnsMode DataGridViewAutoSizeColumnMode перечислений, и. For rows and columns, use the DisplayedCells or DisplayedCellsExceptHeaders field of the DataGridViewAutoSizeRowsMode, DataGridViewAutoSizeColumnsMode, and DataGridViewAutoSizeColumnMode enumerations.

Для максимальной масштабируемости отключите автоматическое изменение размеров и используйте программное изменение размера. For maximum scalability, turn off automatic sizing and use programmatic resizing.

Эффективное использование коллекций выбранных ячеек, строк и столбцов Using the Selected Cells, Rows, and Columns Collections Efficiently

SelectedCellsКоллекция не работает эффективно с большим числом элементов. The SelectedCells collection does not perform efficiently with large selections. SelectedRowsКоллекции и SelectedColumns также могут быть неэффективными, хотя в меньшую степень, так как количество строк в типичном элементе управления меньше, чем в ячейках DataGridView , и меньше, чем в строках. The SelectedRows and SelectedColumns collections can also be inefficient, although to a lesser degree because there are many fewer rows than cells in a typical DataGridView control, and many fewer columns than rows. Чтобы избежать снижения производительности при работе с этими коллекциями, используйте следующие рекомендации. To avoid performance penalties when working with these collections, use the following guidelines:

Чтобы определить, были ли выбраны все ячейки в, DataGridView прежде чем обращаться к содержимому SelectedCells коллекции, проверьте возвращаемое значение AreAllCellsSelected метода. To determine whether all the cells in the DataGridView have been selected before you access the contents of the SelectedCells collection, check the return value of the AreAllCellsSelected method. Однако обратите внимание, что этот метод может привести к тому, что строки не будут общими. Note, however, that this method can cause rows to become unshared. Дополнительные сведения см. в следующем разделе. For more information, see the next section.

Избегайте использования Count свойства объекта System.Windows.Forms.DataGridViewSelectedCellCollection для определения числа выбранных ячеек. Avoid using the Count property of the System.Windows.Forms.DataGridViewSelectedCellCollection to determine the number of selected cells. Вместо этого используйте DataGridView.GetCellCount метод и передайте DataGridViewElementStates.Selected значение. Instead, use the DataGridView.GetCellCount method and pass in the DataGridViewElementStates.Selected value. Аналогичным образом, DataGridViewRowCollection.GetRowCount Используйте DataGridViewColumnCollection.GetColumnCount методы и для определения числа выбранных элементов, а не доступа к выбранным коллекциям строк и столбцов. Similarly, use the DataGridViewRowCollection.GetRowCount and DataGridViewColumnCollection.GetColumnCount methods to determine the number of selected elements, rather than accessing the selected row and column collections.

Использование общих строк Using Shared Rows

Эффективное использование памяти достигается в DataGridView элементе управления через общие строки. Efficient memory use is achieved in the DataGridView control through shared rows. Строки будут совместно использовать как можно больше информации о их внешнем виде и поведении путем совместного использования экземпляров DataGridViewRow класса. Rows will share as much information about their appearance and behavior as possible by sharing instances of the DataGridViewRow class.

При совместном использовании экземпляров строк экономится память, и строки могут быть недоступными для общего доступа. While sharing row instances saves memory, rows can easily become unshared. Например, каждый раз, когда пользователь взаимодействует с ячейкой напрямую, ее строка перестает быть общей. For example, whenever a user interacts directly with a cell, its row becomes unshared. Так как это невозможно, рекомендации в этом разделе полезны только при работе с очень большими объемами данных и только тогда, когда пользователи взаимодействуют с относительно небольшой частью данных при каждом запуске программы. Because this cannot be avoided, the guidelines in this topic are useful only when working with very large amounts of data and only when users will interact with a relatively small part of the data each time your program is run.

Строка не может быть общей в несвязанном DataGridView элементе управления, если какая-либо из ее ячеек содержит значения. A row cannot be shared in an unbound DataGridView control if any of its cells contain values. Если DataGridView элемент управления привязан к внешнему источнику данных или если вы реализуете виртуальный режим и предоставляете собственный источник данных, значения ячеек хранятся за пределами элемента управления, а не в объектах ячеек, что позволяет совместно использовать строки. When the DataGridView control is bound to an external data source or when you implement virtual mode and provide your own data source, the cell values are stored outside the control rather than in cell objects, allowing the rows to be shared.

Объект строки может быть общим, только если состояние всех его ячеек может быть определено на основе состояния строки и состояний столбцов, содержащих ячейки. A row object can only be shared if the state of all its cells can be determined from the state of the row and the states of the columns containing the cells. Если изменить состояние ячейки, чтобы она больше не была выведена из состояния ее строки и столбца, то она не может быть общей. If you change the state of a cell so that it can no longer be deduced from the state of its row and column, the row cannot be shared.

Например, строка не может использоваться совместно в следующих ситуациях: For example, a row cannot be shared in any of the following situations:

Строка содержит одну выбранную ячейку, которая не находится в выбранном столбце. The row contains a single selected cell that is not in a selected column.

Строка содержит ячейку с ToolTipText ContextMenuStrip установленным свойством или. The row contains a cell with its ToolTipText or ContextMenuStrip properties set.

Строка содержит объект DataGridViewComboBoxCell со своим Items набором свойств. The row contains a DataGridViewComboBoxCell with its Items property set.

В режиме с привязкой или в виртуальном режиме можно предоставить подсказки и контекстные меню для отдельных ячеек, обрабатывая CellToolTipTextNeeded CellContextMenuStripNeeded события и. In bound mode or virtual mode, you can provide ToolTips and shortcut menus for individual cells by handling the CellToolTipTextNeeded and CellContextMenuStripNeeded events.

DataGridViewЭлемент управления будет автоматически пытаться использовать общие строки при добавлении строк в DataGridViewRowCollection . The DataGridView control will automatically attempt to use shared rows whenever rows are added to the DataGridViewRowCollection. Чтобы обеспечить совместное использование строк, следуйте приведенным ниже рекомендациям. Use the following guidelines to ensure that rows are shared:

Избегайте вызова Add(Object[]) перегрузки Add метода и Insert(Object[]) перегрузки Insert метода DataGridView.Rows коллекции. Avoid calling the Add(Object[]) overload of the Add method and the Insert(Object[]) overload of the Insert method of the DataGridView.Rows collection. Эти перегрузки автоматически создают несовместное строки. These overloads automatically create unshared rows.

Убедитесь, что строка, указанная в DataGridView.RowTemplate свойстве, может использоваться совместно в следующих случаях: Be sure that the row specified in the DataGridView.RowTemplate property can be shared in the following cases:

При вызове или перегрузки Add() Add(Int32) Add метода или Insert(Int32,Int32) перегрузки Insert метода DataGridView.Rows коллекции. When calling the Add() or Add(Int32) overloads of the Add method or the Insert(Int32,Int32) overload of the Insert method of the DataGridView.Rows collection.

Читайте также:  Установить драйвера до загрузки windows

При увеличении значения DataGridView.RowCount Свойства. When increasing the value of the DataGridView.RowCount property.

При задании DataGridView.DataSource Свойства. When setting the DataGridView.DataSource property.

Убедитесь, что строка, указанная indexSource параметром, может использоваться совместно при вызове AddCopy методов,, AddCopies InsertCopy и InsertCopies DataGridView.Rows коллекции. Be sure that the row indicated by the indexSource parameter can be shared when calling the AddCopy, AddCopies, InsertCopy, and InsertCopies methods of the DataGridView.Rows collection.

Убедитесь, что указанная строка или строки могут быть общими при вызове Add(DataGridViewRow) перегрузки Add метода, AddRange метода, Insert(Int32,DataGridViewRow) перегрузки Insert метода и InsertRange метода DataGridView.Rows коллекции. Be sure that the specified row or rows can be shared when calling the Add(DataGridViewRow) overload of the Add method, the AddRange method, the Insert(Int32,DataGridViewRow) overload of the Insert method, and the InsertRange method of the DataGridView.Rows collection.

Чтобы определить, является ли строка общей, используйте DataGridViewRowCollection.SharedRow метод для получения объекта строки, а затем проверьте Index свойство объекта. To determine whether a row is shared, use the DataGridViewRowCollection.SharedRow method to retrieve the row object, and then check the object’s Index property. Общие строки всегда имеют Index значение свойства – 1. Shared rows always have an Index property value of –1.

Предотвращение недоступности строк Preventing Rows from Becoming Unshared

Общие строки могут быть недоступными в результате выполнения кода или действия пользователя. Shared rows can become unshared as a result of code or user action. Чтобы избежать снижения производительности, не следует выключать общий доступ к строкам. To avoid a performance impact, you should avoid causing rows to become unshared. Во время разработки приложения можно RowUnshared выполнить обработку события, чтобы определить, когда строки не будут совместно использоваться. During application development, you can handle the RowUnshared event to determine when rows become unshared. Это полезно при отладке проблем с общим доступом к строкам. This is useful when debugging row-sharing problems.

Чтобы предотвратить отменять общий доступ к строкам, следуйте приведенным ниже рекомендациям. To prevent rows from becoming unshared, use the following guidelines:

Избегайте индексирования Rows коллекции или прохода по ней с помощью foreach цикла. Avoid indexing the Rows collection or iterating through it with a foreach loop. Как правило, прямой доступ к строкам не требуется. You will not typically need to access rows directly. DataGridView методы, которые работают с строками, принимают аргументы индексов строк, а не экземпляры строк. DataGridView methods that operate on rows take row index arguments rather than row instances. Кроме того, обработчики для событий, связанных со строкой, получают объекты-аргументы событий со свойствами строк, которые можно использовать для работы с строками, не переставляя их в общий доступ. Additionally, handlers for row-related events receive event argument objects with row properties that you can use to manipulate rows without causing them to become unshared.

Если необходимо получить доступ к объекту строки, используйте DataGridViewRowCollection.SharedRow метод и передайте фактический индекс строки. If you need to access a row object, use the DataGridViewRowCollection.SharedRow method and pass in the row’s actual index. Однако обратите внимание, что изменение объекта общей строки, полученного с помощью этого метода, приведет к изменению всех строк, совместно использующих этот объект. Note, however, that modifying a shared row object retrieved through this method will modify all the rows that share this object. Однако строка для новых записей не используется совместно с другими строками, поэтому она не будет затронуты при изменении любой другой строки. The row for new records is not shared with other rows, however, so it will not be affected when you modify any other row. Обратите внимание, что разные строки, представленные общей строкой, могут иметь разные контекстные меню. Note also that different rows represented by a shared row may have different shortcut menus. Чтобы получить правильное контекстное меню из общего экземпляра строки, используйте GetContextMenuStrip метод и передайте фактический индекс строки. To retrieve the correct shortcut menu from a shared row instance, use the GetContextMenuStrip method and pass in the row’s actual index. Если вместо этого вы получаете доступ к ContextMenuStrip свойству общей строки, он будет использовать общий индекс строки, равный-1, и не будет извлекать правильное контекстное меню. If you access the shared row’s ContextMenuStrip property instead, it will use the shared row index of -1 and will not retrieve the correct shortcut menu.

Избегайте индексирования DataGridViewRow.Cells коллекции. Avoid indexing the DataGridViewRow.Cells collection. Прямой доступ к ячейке приводит к тому, что ее родительская строка становится недоступной, и создается новый экземпляр DataGridViewRow . Accessing a cell directly will cause its parent row to become unshared, instantiating a new DataGridViewRow. Обработчики для событий, связанных с ячейками, получают объекты-аргументы событий со свойствами ячеек, которые можно использовать для работы с ячейками, не вызывая отменять общий доступ к строкам. Handlers for cell-related events receive event argument objects with cell properties that you can use to manipulate cells without causing rows to become unshared. Кроме того, можно использовать CurrentCellAddress свойство для получения индексов строк и столбцов текущей ячейки, не обращаясь к ячейке напрямую. You can also use the CurrentCellAddress property to retrieve the row and column indexes of the current cell without accessing the cell directly.

Избегайте режимов выбора на основе ячеек. Avoid cell-based selection modes. Эти режимы приводят к тому, что строки становятся недоступными. These modes cause rows to become unshared. Вместо этого задайте DataGridView.SelectionMode для свойства значение DataGridViewSelectionMode.FullRowSelect или DataGridViewSelectionMode.FullColumnSelect . Instead, set the DataGridView.SelectionMode property to DataGridViewSelectionMode.FullRowSelect or DataGridViewSelectionMode.FullColumnSelect.

Не обрабатывайте DataGridViewRowCollection.CollectionChanged события или DataGridView.RowStateChanged . Do not handle the DataGridViewRowCollection.CollectionChanged or DataGridView.RowStateChanged events. Эти события приводят к тому, что строки становятся недоступными. These events cause rows to become unshared. Кроме того, не вызывайте DataGridViewRowCollection.OnCollectionChanged DataGridView.OnRowStateChanged методы или, которые вызывают эти события. Also, do not call the DataGridViewRowCollection.OnCollectionChanged or DataGridView.OnRowStateChanged methods, which raise these events.

Не следует обращаться к DataGridView.SelectedCells коллекции, если DataGridView.SelectionMode свойство имеет значение FullColumnSelect , ColumnHeaderSelect , FullRowSelect или RowHeaderSelect . Do not access the DataGridView.SelectedCells collection when the DataGridView.SelectionMode property value is FullColumnSelect, ColumnHeaderSelect, FullRowSelect, or RowHeaderSelect. В результате все выбранные строки будут недоступными для общего доступа. This causes all selected rows to become unshared.

Не вызывайте DataGridView.AreAllCellsSelected метод. Do not call the DataGridView.AreAllCellsSelected method. Этот метод может привести к тому, что строки не будут общими. This method can cause rows to become unshared.

Не вызывайте DataGridView.SelectAll метод, если DataGridView.SelectionMode свойство имеет значение CellSelect . Do not call the DataGridView.SelectAll method when the DataGridView.SelectionMode property value is CellSelect. Это приводит к тому, что все строки становятся недоступными. This causes all rows to become unshared.

Не устанавливайте ReadOnly Selected для свойства или ячейки значение, false если соответствующее свойство в столбце имеет значение true . Do not set the ReadOnly or Selected property of a cell to false when the corresponding property in its column is set to true . Это приводит к тому, что все строки становятся недоступными. This causes all rows to become unshared.

Не обращаться к DataGridViewRowCollection.List свойству. Do not access the DataGridViewRowCollection.List property. Это приводит к тому, что все строки становятся недоступными. This causes all rows to become unshared.

Не вызывайте Sort(IComparer) перегрузку Sort метода. Do not call the Sort(IComparer) overload of the Sort method. При сортировке с помощью пользовательского компаратора все строки становятся недоступными. Sorting with a custom comparer causes all rows to become unshared.

Оцените статью