Düğme ölçekleme yapmadığı için çizim kodunu geçersiz kılarak ve fare taşıma/tıklama olaylarını ele alarak köprü stili metin kullanmayı tercih ederim Bir kılavuzun tipik satır yüksekliğine çok iyi. Ancak, bir düğme gerçekten istediğiniz gibi ise, editör türü olarak RepositoryItemButtonEdit
'u kullanarak bunu yapabilmeniz gerekir.
Eski ile ilgileniyorsanız, bir yorum bırakın ve bunu bir örnekle güncelleyeceğim. Aksi takdirde, belirtildiği gibi, sadece RepositoryItemButtonEdit
kullanın. İsterseniz, hücrenin tamamını almak için özelliklerini değiştirebilir ve ardından düğmenin gerilmemesi için sütunu sabit bir boyutta yapabilirsiniz.
GÜNCELLEME: (a) daha hoş görünüyor, (b) verir, çünkü ben standart bir Köprü hücresinden çok daha iyi gibi aşağıdaki "oldukça köprü" için bazı örnek kodlar, post ediyorum hover geri bildirimi ve (c) isterseniz imleci değiştirebilirsiniz (yerel el imlecini işletim sisteminden elde etmek için bir yardımcı program kullanıyorum; Winform'ların yerleşik elinden daha fazla 3B görünümü var).
DevExpress olmayan kullanıcılar için şunu okuyun:System.Windows.Forms.ListView
standardı için neredeyse özdeş bir teknik kullanıyorum. Microsoft bu UI modelini Vista ve Windows 7'de oldukça kullanmaktadır ve sonuç mükemmel çoğaltması olmasa bile nasıl yapılacağını öğrenmek iyidir. Bu kodu hakkında
private int hoverRowHandle = GridControl.InvalidRowHandle;
private void gridView_Click(object sender, EventArgs e)
{
if (hoverRowHandle != GridControl.InvalidRowHandle)
{
MyItem item = gridView.GetRow(hoverRowHandle) as MyItem;
if (item != null)
// Do whatever the "click" action is here
}
}
private void gridView_CustomDrawCell(object sender,
RowCellCustomDrawEventArgs e)
{
if (e.Column == linkColumn)
{
bool hover = (hoverRowHandle == e.RowHandle);
FontStyle style = hover ? FontStyle.Underline : FontStyle.Regular;
TextFormatFlags formatFlags =
TextFormatFlags.Left | TextFormatFlags.VerticalCenter |
TextFormatFlags.WordEllipsis;
Color foreColor = gridView.IsRowSelected(e.RowHandle) ?
Color.White : (hover ? MyColors.LinkHover : MyColors.Link);
using (Font font = new Font(gridControl.Font, style))
{
TextRenderer.DrawText(e.Graphics, "Link Text", font, e.Bounds,
foreColor, formatFlags);
}
e.Handled = true;
}
}
private void gridView_MouseLeave(object sender, EventArgs e)
{
int tempRowHandle = hoverRowHandle;
hoverRowHandle = GridControl.InvalidRowHandle;
if (tempRowHandle != GridControl.InvalidRowHandle)
{
gridView.InvalidateRowCell(tempRowHandle, linkColumn);
}
}
private void gridView_MouseMove(object sender, MouseEventArgs e)
{
int tempRowHandle = hoverRowHandle;
if (tempRowHandle != GridControl.InvalidRowHandle)
{
hoverRowHandle = GridControl.InvalidRowHandle;
gridView.InvalidateRowCell(tempRowHandle, linkColumn);
}
GridHitInfo hitInfo = gridView.CalcHitInfo(e.Location);
if (hitInfo.InRowCell && (hitInfo.Column == linkColumn))
{
hoverRowHandle = hitInfo.RowHandle;
gridView.InvalidateRowCell(hoverRowHandle, linkColumn);
}
bool hoverDetail = (hoverRowHandle != GridControl.InvalidRowHandle);
gridControl.Cursor = hoverDetail ? Cursors.Hand : Cursors.Default;
}
birkaç not:
MyItem
Tablo görünümüne bağlı olan verilerin ne olursa olsun türüdür. Belki de DataRow
veya veri kaynağı IList<T>
ise, bazı özel türdür.
MyColors
, kullanıcı arabirimi öğeleri için kullanılan birkaç public static readonly Color
alanını tanımlayan bir yardımcı program sınıfıdır. Sadece bir ızgara üzerinde yapacaksanız, referansları kodlanmış renklerle değiştirebilirsiniz.
Font
'u önbelleğe almamaya çalışıyorum, ancak muhtemelen bunlardan sadece ikisi var.
İmleç mantığı, ızgarada kullanabileceğiniz başka bir imleç mantığına bulaşacaktır (bu, benim için neredeyse her durumda neredeyse hiç yoktur, bu nedenle genellikle iyi olmalısınız).
Birden fazla "bağlantısını sütunu" sahip olmak istiyorsanız
, sen hoverRowHandle
ek olarak bir hoverColumn
devlet alanını korumak ve tabii ki birden çok sütun aramak için bu tek sütunlu eşitlik karşılaştırmalar değiştirmeniz gerekir. Kendi Win uygulamalar için
, Aslında bana sütun adı/bağlantı metni çiftlerinin bir listede savurma bir GridView
veya ListView
Bu davranışı bağlamak sağlar Extender sağlayıcısı var, ama bu kod sadece bir çiş olduğunu Burada yayınlamak için çok uzun. Yukarıdaki örnek, başlamanızı sağlamalıdır.
Teşekkür teklif için, ben köprü bir exmple görmek isteriz. Bu arada, 'RepositoryItemButtonEdit' çalışmasını kullanacağım. –
@ calico-cat: İşte, söz verildiği gibi! – Aaronaught
Bu cevaba koyduğunuz tüm çabalarınız için çok teşekkür ederim. Keşke bir kereden fazla kazanabilseydim! –