ПредишенСледващото

От появата на емблематичния веднъж Делфи се е променил много. Но това, което е останало - Ping някои вградени визуални ефекти.

Имах този опит при разработването на прост домейни chekkera. Много лесен за използване, изглежда, интерфейс елемент - колона отметка - всъщност ужасно бавно. За да отбележат 500 линии, необходими около 10 секунди. 1000 записа се увеличили по време на 4 (вместо 2, както може би си мислите). Без номера не се предадоха значителен прираст в производителността.

Ping datagridview отметка лечение с помощта datagridviewimagecolumn

Да потърсите с Google в интернет, се сбогува с идеята да направи нещо на базата на типа на колона.

Новодошлите се оплакват от бавна работа, както и "старите" препоръчва да се използва обикновена отметка добавя програмно на правилното място. Оказва се, че много от правилните места, както и да се манипулира на дисплея на отметки все още трябва ръчно - дефиниране на видимата линия, поставете отметка на точното място, за да "помни" дисплей (включване / изключване) на всеки. Бях започнал да се провали в такава рана, но заради друг от възможните видове колони - DataGridViewImageColumn.

Оказа се, че това, което ви трябва. Начини за "такси" за мнозина, предполагат, че той се използва.

Да започнем с това, че е необходимо да се подготвят 2 държави на флага: маркирана или не. В моя случай, тя е с размер на картината 40 х 20 пиксела. В този случай, на ширината на колоните е 20.

Прилагането на този образ към клетка, който привежда в дясно (или ляво) ръб, в зависимост от коя страна на "птица".

Определяне на състоянието на включване / изключване чрез проверка на ръба на която подравнени изображения. Нека масата се нарича dataGridView1. Колоната с "квадратчетата" (не забравяйте, че те не са истински, а само ни емулация) ще бъде първото. Вертикално подравняване е логично да се направи в средите. След това изключете отметката един от двата варианта може да се записва на първия ред:

dataGridView1.Rows [0] .Cells [0] = .Style.Alignment DataGridViewContentAlignment.MiddleLeft;
// или
dataGridView1.Rows [0] .Cells [0] = .Style.Alignment DataGridViewContentAlignment.MiddleRight;

Така изравнете снимката в ляво / дясно (ляво / дясно) ръб (вертикална - в средата, както е посочено от средата).

Всичко супер. Сега можем да се манипулира програмно марки във всеки ред, създавайки илюзия (което зависи от качеството на чертежа) пълноправен член.

Но това е само част от проблема. Добра идея е да се даде възможност на потребителя да промени статута на квадратчета, като кликнете в клетките на първата колона. Това събитие ще помогне CellClick - просто кликнете два пъти в съответното поле на свойствата на раздела → Събития с активния елемент форми DataGridView.

частен невалидни dataGridView1_CellClick (обект подател, DataGridViewCellEventArgs д)
// e.RowIndex - линия
// e.ColumnIndex - колона
// System.Drawing.Bitmap
// Ако първия ред и колона (отрицателни стойности - заглавията).
ако (e.ColumnIndex == 0 e.RowIndex> = 0) // Ако левият подравняването.
ако (dataGridView1.Rows [e.RowIndex] .Cells [0] .Style.Alignment == DataGridViewContentAlignment.MiddleLeft)
//. След това преминете към дясното подравняване
dataGridView1.Rows [e.RowIndex] .Cells [0] = .Style.Alignment DataGridViewContentAlignment.MiddleRight;
>
останало //. в противен случай - на ляво
dataGridView1.Rows [e.RowIndex] .Cells [0] = .Style.Alignment DataGridViewContentAlignment.MiddleLeft;
>
// така премахнете избора линии
dataGridView1.Rows [e.RowIndex] .Cells [0] = .Selected фалшива;
>
>

Името на прехващача - dataGridView1_CellClick () - IDE ще генерира автоматично. Ние също така да добавите подходящ код. DataGridViewContentAlignment изброяване определя константи за подравняване изображение в клетката.

Като цяло, това е всичко. За тези, които са достигнали тук, аз ще ви покажа как можете да промените / комбинирате фонови изображения. Да предположим, че сте изтеглили нов ресурс (на снимката) и му даде чек име. Достъп до вградени ресурси чрез Properties.Resources приложение. Ако сте забравили името на приложението, можете да я видите в прозореца Solution Explorer. В моя случай, това MyWindowsApplication.

// първа линия да се използва проверката на ресурсите
dataGridView1.Rows [0] .Cells [0] = .Value MyWindowsApplication.Properties.Resources.check;
// за втората - check2
dataGridView1.Rows [1] .Cells [0] = .Value MyWindowsApplication.Properties.Resources.check2;

Изненадващо, такава проста техника ускорява "otmechivaniyu с" един порядък (и дори повече от увеличаване на броя на редовете).

Подкрепете проекта - споделете линка, благодаря!