using System; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; namespace LibationWinForms { public partial class DescriptionDisplay : Form { private int borderThickness = 5; public int BorderThickness { get => borderThickness; set { borderThickness = value; textBox1.Location = new Point(borderThickness, borderThickness); textBox1.Size = new Size(Width - 2 * borderThickness, Height - 2 * borderThickness); } } public string DescriptionText { get => textBox1.Text; set => textBox1.Text = value; } public Point SpawnLocation { get; set; } public DescriptionDisplay() { InitializeComponent(); textBox1.LostFocus += (_, _) => Close(); Shown += DescriptionDisplay_Shown; } private void DescriptionDisplay_Shown(object sender, EventArgs e) { textBox1.DeselectAll(); HideCaret(textBox1.Handle); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); int lineCount = textBox1.GetLineFromCharIndex(int.MaxValue) + 2; Height = Height - textBox1.Height + lineCount * TextRenderer.MeasureText("X", textBox1.Font).Height; Location = new Point(SpawnLocation.X, Math.Min(SpawnLocation.Y, Screen.PrimaryScreen.WorkingArea.Height - Height)); } [DllImport("user32.dll")] static extern bool HideCaret(IntPtr hWnd); } }