#c builder
#c builder
Вопрос:
Я пытаюсь добавить несколько элементов управления в drawgrid. Я могу добавить элементы управления, но после их добавления и прокрутки элементы управления отображаются в разных ячейках.
Вот код, который я использую для добавления элементов управления в мою drawgrid:
void __fastcall TForm1::Button1Click(TObject * Отправитель) {
pnlHierBox = новая панель управления (this); // определяется на уровне класса
pnlHierBox->Left = 0;
pnlHierBox->Top = 0;
pnlHierBox->Width = 180;
pnlHierBox->Height = 120;
img = new TImage(pnlHierBox);
img->Picture = Image1->Picture;
img->Left = 0;
img->Top = 3;
img->AutoSize = true;
img->Parent = pnlHierBox;
lbl = new TLabel(pnlHierBox);
lbl->Caption = "Employee 1";
lbl->Left = 24;
lbl->Top= 15;
lbl->Parent = pnlHierBox;
icon = new TImage(pnlHierBox);
icon->Picture = Image2->Picture;
icon->Left = 100
icon->Top = 63;
icon->AutoSize = true;
icon->Parent = pnlHierBox;
rect = DrawGrid1->CellRect(2,0);
pnlHierBox->Top = rect.Top;
pnlHierBox->Left = rect.Left;
DrawGrid1->InsertControl(pnlHierBox);
// Добавьте другие элементы управления TPanel в drawgrid
//
}
Ответ №1:
Не вызывайте InsertControl()
напрямую. Вместо этого используйте Parent
свойство:
// DrawGrid1->InsertControl(pnlHierBox);
pnlHierBox->Parent = DrawGrid1;
Комментарии:
1. Я убрал insertcontrol() и добавил pnlHierBox-> Parent = DrawGrid1; и все еще не рисую. Это похоже на то, что ячейки нужно сделать недействительными или перекрасить, а это не так. Работает нормально, я просто использую OnDrawCell и рисую изображения в ячейках. Я просто хотел иметь возможность управлять, чтобы я мог получать события при нажатии и т.д. Есть другие идеи? Ценю любую помощь. Спасибо.
2. Извините.. Упоминал ли твое имя @Remy Lebeau — TeamB
3. Элементы управления stock grid VCL НЕ предназначены для поддержки встроенных элементов управления (кроме их встроенного
InplaceEdit
элемента управления). Требуется много ручной работы, чтобы встроить элементы управления и поддерживать их синхронизацию. Вам лучше всего просто использоватьOnDrawCell
событие и имитировать нужное вам поведение пользовательского интерфейса.