टैब-सी #, विनफॉर्म, यूजर इंटरफेस, डाटाग्रिडव्यू दबाए बिना DataGridView वर्तमान सेल रूपरेखा को कैसे बल दें

क्या ऐसा कुछ ऐसा करने के लिए है जिससे इसे चालू किया जा सके DataGridView हमेशा आपके आस-पास की धराशायी रेखा सीमा होती है जिसे आप दबाते समय प्राप्त करते हैं Tab बटन? मैंने देखा है कि अगर आपने दबाया है Tab बटन के बाद एक बार जब वर्तमान सेल में हमेशा इसके चारों ओर सीमा होती है, लेकिन मैं "उस सीमा को वहां से शुरू करना चाहता हूं, बिना प्रेस के Tab बटन।

वर्तमान में मैं प्रोग्राम रूप से टैब कुंजी भेज रहा हूं, जैसा कि नीचे दिया गया है:

SendKeys.Send("{TAB}");

लेकिन यह kludgy है और अगर कोई उपलब्ध है तो मैं एक उचित समाधान है।

संपादित करें: मैं इसका उल्लेख करना भूल गया SelectionMode करने के लिए सेट है FullRowSelect और मैं इसे बदलना नहीं चाहता हूं। मैं चाहता हूं कि सीमा केवल वर्तमान सेल के साथ-साथ पूरी पंक्ति को हाइलाइट किया जा सके।

उत्तर:

जवाब के लिए 2 № 1

से प्राप्त करने के लिए एक नई कक्षा बनाएँ DataGridView और ओवरराइड करें ShowFocusCues संपत्ति - वापसी True सेवा मेरे हमेशा फोकस आयत दिखाएं या False सेवा मेरे कभी नहीँ इसे दिखाना। यदि आप इसे एक सनकी में बदलना चाहते हैं तो आप इसे बेनकाब करने के लिए एक सार्वजनिक संपत्ति भी जोड़ सकते हैं।

public class DataGridViewFocused : DataGridView
{
public bool ShowFocus { get; set; }

protected override bool ShowFocusCues
{
get
{
return this.ShowFocus;
}
}
}

DataGridViewFocused dataGridView1 = new DataGridViewFocused();
dataGridView1.ShowFocus = true;

नोट: यह केवल ध्यान केंद्रित करेगा CurrentCell जैसा कि यह व्यवहार करता है। तो साथ भी FullRowSelect सेट, हाइलाइट की गई पंक्ति में चयनित कोशिकाओं में से केवल एक ही केंद्रित होगा।


उत्तर № 2 के लिए 1

यह व्यवहार विंडोज रूपों में हार्डकोड किया गया प्रतीत होता है। मुझे नहीं लगता कि आपको इसे कोड करने का एक बेहतर तरीका मिल सकता है।

एक सुझाव जो मैं प्रस्तावित कर सकता हूं वह आपको संभालना है DataGridView.CellPainting घटना और मैन्युअल रूप से सीमा खींचने के लिए।फिर आप जिस शैली को चाहते हैं उसके साथ सीमा खींचने में सक्षम होंगे, ताकि वर्तमान सेल "टैब" विधि के मुकाबले उपयोगकर्ता के लिए अधिक दिखाई दे। लाल धराशायी सीमा के साथ एक उदाहरण यहां दिया गया है:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (dataGridView1.CurrentCell != null && e.RowIndex != -1 && e.ColumnIndex != -1 &&
dataGridView1.CurrentCell.RowIndex == e.RowIndex &&
dataGridView1.CurrentCell.ColumnIndex == e.ColumnIndex)
{
e.Paint(e.ClipBounds, e.PaintParts);
var pen = new Pen(Color.Red) { DashStyle = DashStyle.Dash };
var rect = new Rectangle(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width - 2, e.CellBounds.Height - 2);
e.Graphics.DrawRectangle(pen, rect);
e.Handled = true;
}
}

संबंधित सवाल
सबसे लोकप्रिय