ATTENTION: You are viewing a page formatted for mobile devices; to view the full web page, click HERE.

Other Software > Developer's Corner

A very simple help window

(1/1)

Renegade:
I put together the basics for a very simple help/dialog window, and thought that it might be useful for some others.

It's NOT complete/production, but is a good basic help for someone to get started on a better dialog. i.e. You can use it as a launch pad to create something much better than the typical lame YES/NO dialog.

The basics are that it opens a dialog and displays buttons for people to click. The number of buttons can be arbitrary, e.g. 1 or 100. Buttons all display semi-nicely in rows.

Likely it's not all that useful except as a launch pad for ideas.

Help.zip (11.01 kB - downloaded 224 times.)

Here's the basic code:


--- Code: C# ---using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; namespace Help{    public partial class HelpWindow : Form    {        public string Html = string.Empty;        public string[] ButtonTexts;        public string Value = string.Empty;         // Don't use the default contructor. Use the override.         //public HelpWindow()        //{        //    InitializeComponent();        //}         /// <summary>        /// A simple override to let you set the HTML of the browser and create an arbitrary number of buttons.        /// </summary>        /// <param name="html">The HTML for the browser.</param>        /// <param name="buttonTexts">The text for each button. The form returns the text value for the clicked button when it closes.</param>        public HelpWindow(string html, string[] buttonTexts)        {            InitializeComponent();            Html = html;            ButtonTexts = buttonTexts;             int lastLeft = 24;            List<Size> sizes = new List<Size>();            int newTop = 16;            for (int i = 0; i < ButtonTexts.Length; i++)            {                // Create a new button - this could be beefed up with a new custom type or something.                Button b = new Button();                b.Text = ButtonTexts[i];                Size s = TextRenderer.MeasureText(b.Text, b.Font);                sizes.Add(s);                b.Width = s.Width + 10;                b.Height = s.Height + 8;                 // check the width and see if the next button will fit.                int totalWidth = 24;                foreach (Size sz in sizes)                {                    // Add up the widths and some padding.                    totalWidth += sz.Width + 10; //   the width of all previous, and the current one                    // check if that is too wide for the current form width                    if (totalWidth >= scPanel.Panel2.Width - 44) // we want a bit extra width on the right side so it's not jam packed.                    {                        // adjust the top down 24 with 10 padding - like a line feed LF                        newTop += s.Height + 8;                        // clear the sizes as we're starting over now                        sizes = new List<Size>();                        // add the current button again as we'll need it again in the next loop iteration                        sizes.Add(s);                        // Adjust the left back - like a carriage return CR                        lastLeft = 24;                        // Put the splitter up a bit to automatically show the lower buttons.                        scPanel.SplitterDistance -= 34;                        break;                    }                }                 b.Top = newTop;                b.Left = lastLeft;                b.Click += new EventHandler(b_Click);                scPanel.Panel2.Controls.Add(b);                lastLeft = b.Left + b.Width + 16;            }        }         void b_Click(object sender, EventArgs e)        {            // Set the value and close the form.             this.Value = ((Button)sender).Text;            this.Close();        }         private void HelpWindow_Load(object sender, EventArgs e)        {            // This is where you should load the HTML into a browser control or something like that. It should be in Panel1.        }         private void HelpWindow_FormClosing(object sender, FormClosingEventArgs e)        {            // Not really needed here. Do any last minute processing if you like here.         }    }}

Renegade:
Ah, I should also post an example usage:


--- Code: C# ---Help.HelpWindow h = new Help.HelpWindow("The buttons below are dynamic, and you can have as many as you like. <br /><br />Clicking one of the buttons returns the value clicked.", new string[] { "farty party~!", "new year", "bye!" });            h.ShowDialog();            Console.WriteLine("You clicked: <br/ >\"<b>" + h.Value + "</b>\"");            h.Dispose();

Navigation

[0] Message Index

Go to full version