using System; using System.Text; using System.Windows.Forms; using UIResources = BookmarkManager.UIResource; namespace RyzStudio.Windows.ThemedForms { public class TKeyCodeTextBox : TButtonTextBox { public class Results { public bool IsCtrl { get; set; } = false; public bool IsAlt { get; set; } = false; public bool IsShift { get; set; } = false; public Keys Key { get; set; } = Keys.None; public int ModifierCode => ((this.IsAlt ? 1 : 0) + (this.IsCtrl ? 2 : 0) + (this.IsShift ? 4 : 0)); public int KeyCode => (int)this.Key; public string DisplayText { get { StringBuilder sb = new StringBuilder(); if (this.IsCtrl) sb.Append("Ctrl+"); if (this.IsShift) sb.Append("Shift+"); if (this.IsAlt) sb.Append("Alt+"); sb.Append(this.Key.ToString()); return sb.ToString(); } } public void Clear() { this.IsCtrl = false; this.IsAlt = false; this.IsShift = false; this.Key = Keys.None; } } public Results KeyCodeResults { get; set; } = new Results(); public TKeyCodeTextBox() : base() { this.NormalImage = UIResources.trash; this.HighlightImage = UIResources.trash2; this.Text = string.Empty; this.InnerTextBox.ReadOnly = true; this.InnerTextBox.PreviewKeyDown += textBox1_PreviewKeyDown; } private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.ControlKey) return; if (e.KeyCode == Keys.ShiftKey) return; if (e.KeyCode == Keys.Menu) return; this.KeyCodeResults.IsCtrl = e.Control; this.KeyCodeResults.IsAlt = e.Alt; this.KeyCodeResults.IsShift = e.Shift; this.KeyCodeResults.Key = e.KeyCode; this.Text = this.KeyCodeResults.DisplayText; } protected override void imageBox1_Click(object sender, EventArgs e) { this.KeyCodeResults.Clear(); this.Text = this.KeyCodeResults.DisplayText; } public void UpdateKeyCode(bool isCtrl, bool isAlt, bool isShift, Keys key) { this.KeyCodeResults.IsCtrl = isCtrl; this.KeyCodeResults.IsAlt = isAlt; this.KeyCodeResults.IsShift = isShift; this.KeyCodeResults.Key = key; this.Text = this.KeyCodeResults.DisplayText; } } }