using System.IO; using Microsoft.Ink; namespace DualScreenDemo { public partial class PrimaryForm { private PictureBox pictureBoxHandWritingSingers; private Button refillButtonHandWritingSingers; private Button clearButtonHandWritingSingers; private Button closeButtonForSingers; private Panel handWritingPanelForSingers; private InkOverlay inkOverlayForSingers; private RichTextBox handwritingInputBoxForSingers; private ListBox candidateListBoxForSingers; private void InitializeHandWritingForSingers() { InitializeHandWritingPanelForSingers(); InitializeInkOverlayForSingers(); InitializeHandwritingInputBoxForSingers(); InitializeCandidateListBoxForSingers(); InitializeBtnsHandwritingSingers(); } private void InitializeHandWritingPanelForSingers() { handWritingPanelForSingers = new Panel { BorderStyle = BorderStyle.FixedSingle, BackColor = Color.WhiteSmoke, Visible = false }; ResizeAndPositionControl(handWritingPanelForSingers, 20, 89, 650, 260); pictureBoxHandWritingSingers.Controls.Add(handWritingPanelForSingers); } private void InitializeInkOverlayForSingers() { try { inkOverlayForSingers = new InkOverlay(handWritingPanelForSingers); inkOverlayForSingers.Enabled = false; inkOverlayForSingers.Ink = new Ink(); inkOverlayForSingers.DefaultDrawingAttributes.Color = Color.Black; inkOverlayForSingers.DefaultDrawingAttributes.Width = 100; inkOverlayForSingers.Stroke += new InkCollectorStrokeEventHandler(InkOverlayForSingers_Stroke); inkOverlayForSingers.Enabled = true; } catch (Exception ex) { Console.WriteLine("Failed to initialize ink overlay for singers: " + ex.Message); } } private void InkOverlayForSingers_Stroke(object sender, InkCollectorStrokeEventArgs e) { RecognizeInk(inkOverlayForSingers, candidateListBoxForSingers); } private void InitializeHandwritingInputBoxForSingers() { handwritingInputBoxForSingers = new RichTextBox { Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular), Visible = false }; ResizeAndPositionControl(handwritingInputBoxForSingers, 20, 12, 541, 64); pictureBoxHandWritingSingers.Controls.Add(handwritingInputBoxForSingers); } private void InitializeCandidateListBoxForSingers() { candidateListBoxForSingers = new ListBox { Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular), Visible = false }; ResizeAndPositionControl(candidateListBoxForSingers, 675, 81, 115, 270); candidateListBoxForSingers.SelectedIndexChanged += CandidateListBoxForSingers_SelectedIndexChanged; pictureBoxHandWritingSingers.Controls.Add(candidateListBoxForSingers); } private void CandidateListBoxForSingers_SelectedIndexChanged(object sender, EventArgs e) { if (candidateListBoxForSingers.SelectedIndex != -1) { string selectedWord = candidateListBoxForSingers.SelectedItem.ToString(); handwritingInputBoxForSingers.Text += selectedWord; candidateListBoxForSingers.Visible = false; if (inkOverlayForSingers != null) { inkOverlayForSingers.Ink.DeleteStrokes(); handWritingPanelForSingers.Invalidate(); } } } private void ShowImageOnPictureBoxHandWritingSingers(string imagePath) { Bitmap originalImage = new Bitmap(imagePath); pictureBoxHandWritingSingers.Image = originalImage; ResizeAndPositionPictureBox(pictureBoxHandWritingSingers, 388, 355, 810, 360); pictureBoxHandWritingSingers.Visible = true; } private void SetHandWritingForSingersAndButtonsVisibility(bool isVisible) { EnableDoubleBuffering(handWritingPanelForSingers); EnableDoubleBuffering(handwritingInputBoxForSingers); EnableDoubleBuffering(candidateListBoxForSingers); EnableDoubleBuffering(pictureBoxHandWritingSingers); EnableDoubleBuffering(refillButtonHandWritingSingers); EnableDoubleBuffering(clearButtonHandWritingSingers); EnableDoubleBuffering(closeButtonForSingers); if (isVisible)SetUIVisible(pictureBoxHandWritingSingers); else CloseUI(pictureBoxHandWritingSingers); } private void InitializeBtnsHandwritingSingers() { var data = LoadBtnConfigData(); refillButtonHandWritingSingers = new Button { Name = "refillButtonHandWritingSingers", }; ConfigureButton(refillButtonHandWritingSingers, 565, 12, 72, 66, new Bitmap(Path.Combine(serverPath, data["RefillButtonImagesHandWriting"]["normal"])), new Bitmap(Path.Combine(serverPath, data["RefillButtonImagesHandWriting"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["RefillButtonImagesHandWriting"]["mouseDown"])), RefillButtonHandWritingSingers_Click); pictureBoxHandWritingSingers.Controls.Add(refillButtonHandWritingSingers); clearButtonHandWritingSingers = new Button { Name = "clearButtonHandWritingSongs", }; ConfigureButton(clearButtonHandWritingSingers, 642, 11, 72, 66, new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesHandWriting"]["normal"])), new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesHandWriting"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesHandWriting"]["mouseDown"])), ClearButtonHandWritingSingers_Click); pictureBoxHandWritingSingers.Controls.Add(clearButtonHandWritingSingers); closeButtonForSingers = new Button { Name = "closeButtonForSingers", }; ConfigureButton(closeButtonForSingers, 719, 11, 72, 66, new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesHandWriting"]["normal"])), new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesHandWriting"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesHandWriting"]["mouseDown"])), CloseButtonForSingers_Click); pictureBoxHandWritingSingers.Controls.Add(closeButtonForSingers); } #region 按鈕點擊事件 private void HandWritingSearchButtonForSingers_Click(object sender, EventArgs e) { this.SuspendLayout(); UpdateSSearchBtn(handWritingSearchButton, handWritingSearchActiveBackground); EnableDoubleBuffering(handWritingPanelForSingers); EnableDoubleBuffering(handwritingInputBoxForSingers); EnableDoubleBuffering(candidateListBoxForSingers); EnableDoubleBuffering(pictureBoxHandWritingSingers); EnableDoubleBuffering(refillButtonHandWritingSingers); EnableDoubleBuffering(closeButtonForSingers); var configData = LoadBtnConfigData(); string handWritingImagePath = Path.Combine(serverPath, configData["ImagePaths"]["HandWritingSingers"]); ShowImageOnPictureBoxHandWritingSingers(Path.Combine(serverPath, handWritingImagePath)); SetZhuYinSingersAndButtonsVisibility(false); SetEnglishSingersAndButtonsVisibility(false); SetPinYinSingersAndButtonsVisibility(false); SetWordCountSingersAndButtonsVisibility(false); // 隱藏字數搜尋相關控件 //SetPictureBoxArtistSearchAndButtonsVisibility(false); SetHandWritingForSingersAndButtonsVisibility(true); ResetinputBox(); this.ResumeLayout(); } private void RefillButtonHandWritingSingers_Click(object sender, EventArgs e) { handwritingInputBoxForSingers.Text = ""; } private void ClearButtonHandWritingSingers_Click(object sender, EventArgs e) { if (pictureBoxHandWritingSingers.Controls.Contains(handWritingPanelForSingers) && inkOverlayForSingers != null) { inkOverlayForSingers.Ink.DeleteStrokes(); handWritingPanelForSingers.Invalidate(); } } private void CloseButtonForSingers_Click(object sender, EventArgs e) { pictureBoxHandWritingSingers.SuspendLayout(); SetHandWritingForSingersAndButtonsVisibility(false); handWritingSearchButton.BackgroundImage = handWritingSearchNormalBackground; FindHandwritingSingers(); pictureBoxHandWritingSingers.ResumeLayout(); } private void FindHandwritingSingers() { string searchText = handwritingInputBoxForSingers.Text; string query = string.IsNullOrWhiteSpace(searchText) ? "SELECT * FROM artists LIMIT 1000;" : $"SELECT * FROM artists WHERE `name` LIKE '{searchText}%';"; //string query = $"SELECT * FROM ArtistLibrary WHERE `歌手姓名` LIKE '{searchText}%' "; var searchResults = SearchSingers_Mysql(query); currentPage = 0; currentArtistList = searchResults; totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); multiPagePanel.currentPageIndex = 0; multiPagePanel.LoadSingers(currentArtistList); } #endregion } }