ฉันมีองค์ประกอบบางอย่างใน ComboBox (WinForms กับ C #) ฉันต้องการให้เนื้อหาของพวกเขาเป็นแบบคงที่เพื่อให้ผู้ใช้ไม่สามารถเปลี่ยนค่าภายในเมื่อเรียกใช้แอปพลิเคชัน ฉันไม่ต้องการให้ผู้ใช้เพิ่มค่าใหม่ให้กับ ComboBox
ฉันมีองค์ประกอบบางอย่างใน ComboBox (WinForms กับ C #) ฉันต้องการให้เนื้อหาของพวกเขาเป็นแบบคงที่เพื่อให้ผู้ใช้ไม่สามารถเปลี่ยนค่าภายในเมื่อเรียกใช้แอปพลิเคชัน ฉันไม่ต้องการให้ผู้ใช้เพิ่มค่าใหม่ให้กับ ComboBox
คำตอบ:
ใช้คุณสมบัติ ComboStyle:
comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
combo.Properties.TextEditStyle = DisableTextEditor
นี่เป็นอีกวิธีที่ฉันใช้เพราะเปลี่ยนDropDownSyle
เป็นDropDownList
ทำให้ดูเป็น 3D และบางครั้งมันก็น่าเกลียด
คุณสามารถป้องกันการป้อนข้อมูลผู้ใช้โดยจัดการKeyPress
เหตุการณ์ของ ComboBox เช่นนี้
private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
Paste
ด้วย ฉันไม่รู้เลยว่าตอนนี้
Paste
คุณจะต้องสร้างเมนูบริบทว่างเปล่าปลอมและกำหนดให้กับ ComboBox
คุณสามารถเปลี่ยน DropDownStyle ในคุณสมบัติเป็น DropDownList ได้ นี่จะไม่แสดงกล่องข้อความสำหรับตัวกรอง
(ภาพหน้าจอของFUSION CHA0S )
ฉันลองใช้ ComboBox1_KeyPress แล้ว แต่ก็สามารถลบตัวอักษรได้และคุณยังสามารถใช้คำสั่ง copy paste My DropDownStyle ถูกตั้งค่าเป็น DropDownList แต่ก็ยังไม่มีประโยชน์ ดังนั้นฉันได้ทำตามขั้นตอนด้านล่างเพื่อหลีกเลี่ยงการแก้ไขข้อความ Combobox
โค้ดด้านล่างจัดการคีย์ลบและแบ็คสเปซ และยังปิดใช้งานการรวมกันกับปุ่มควบคุม (เช่น ctr + C หรือ ctr + X)
Private Sub CmbxInType_KeyDown(sender As Object, e As KeyEventArgs) Handles CmbxInType.KeyDown
If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then
e.SuppressKeyPress = True
End If
If Not (e.Control AndAlso e.KeyCode = Keys.C) Then
e.SuppressKeyPress = True
End If
End Sub
ในการใช้แบบฟอร์มโหลดด้านล่างบรรทัดเพื่อปิดการใช้งานคลิกขวาที่การควบคุม combobox เพื่อหลีกเลี่ยงการตัด / วางผ่านการคลิกเมาส์
CmbxInType.ContextMenu = new ContextMenu()