Avatar billede _et Praktikant
14. juni 2005 - 15:45 Der er 2 kommentarer og
1 løsning

Billede i textbox/combobox/listbox

Jeg skal lavet et program til en handikappet dame, som ikke kan skrive/læse normale bogstaver, men hun kan derimod et symbolsystem.

Så min plan er at hun kan klikke på et billede af modtageren i en combobox, og derefter klikke symbolerne fra en listbox, så løbende bliver indsat i textboxen sammen med symbolernes betydning.

Jeg har brug for et eksempel eller at blive peget i den rette retning.

Hvis besvarelsen er rigtig god kan der godt blive tale om flere point :-)
Avatar billede driis Nybegynder
14. juni 2005 - 16:20 #1
Du kan sætte DrawMode til DrawMode.OwnerDrawFixed / DrawMode.OwnerDrawVariable

Så har din kode ansvaret for at tegne kontrollen. Du kan så tilføje en eventhandler til DrawItem event'en, som sker hver gang et item i en list-/combobox bliver tegnet.

I DrawItem event'et har du automatisk et Graphics objekt at svare på, fra den DrawItemEventArgs der følger med.

Alternativt kan du override OnPaint metoden, men netop til list- og comboboxe er ovenstående en god løsning da du får meget af funktionaliteten foræret.

Her er et eksempel fra noget kode jeg fornylig har arbejdet med:

// denne kode stammer fra konstruktoren i en klasse der nedarver fra ListBox
this.DrawMode = DrawMode.OwnerDrawFixed;
this.DrawItem += new DrawItemEventHandler(MarkerSelector_DrawItem);


Følgende metode tegner så hvert item:
/// <summary>
/// Draws each item of this MarkerSelector
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MarkerSelector_DrawItem(object sender, DrawItemEventArgs e)
{       
    if (e.Index >= 0)
    {           
        Graphics g = e.Graphics;
        e.DrawBackground();
        string text = this.Items[e.Index].ToString();   
        SizeF textSize = g.MeasureString(text,this.Font);
        float y = e.Bounds.Top + ((e.Bounds.Height - textSize.Height)/2);
        float x = PAD;

        g.DrawString(text,Font,new SolidBrush(e.ForeColor),x,y);

        PointF [] drawPoint = new PointF[] {new PointF(x/2,e.Bounds.Top + e.Bounds.Height/2) };
        Graph.DrawPoints(g,drawPoint,(Marker)Enum.Parse(typeof(Marker),text),e.ForeColor);
        e.DrawFocusRectangle();
    }

}
Avatar billede _et Praktikant
20. juni 2005 - 23:51 #2
Det ser rigtigt fint ud, men jeg kan ikke lige helt få det til at virke.
Jeg får fejl med at "Marker" "Graph" og "PAD" ikke findes i namespace/class

Her er min kode, hvis du lige gider kigge hvad der er galt.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace blis_mail
{
    public class Main_form : System.Windows.Forms.Form
    {
        private System.Windows.Forms.ComboBox comboBox1;
        private System.Windows.Forms.Label label1;
        private System.ComponentModel.Container components = null;

        public Main_form()
        {
            InitializeComponent();
        }
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
            System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Main_form));
            this.comboBox1 = new System.Windows.Forms.ComboBox();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // comboBox1
            //
            this.comboBox1.AccessibleDescription = resources.GetString("comboBox1.AccessibleDescription");
            this.comboBox1.AccessibleName = resources.GetString("comboBox1.AccessibleName");
            this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("comboBox1.Anchor")));
            this.comboBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("comboBox1.BackgroundImage")));
            this.comboBox1.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("comboBox1.Dock")));
            this.comboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
            this.comboBox1.Enabled = ((bool)(resources.GetObject("comboBox1.Enabled")));
            this.comboBox1.Font = ((System.Drawing.Font)(resources.GetObject("comboBox1.Font")));
            this.comboBox1.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("comboBox1.ImeMode")));
            this.comboBox1.IntegralHeight = ((bool)(resources.GetObject("comboBox1.IntegralHeight")));
            this.comboBox1.ItemHeight = ((int)(resources.GetObject("comboBox1.ItemHeight")));
            this.comboBox1.Location = ((System.Drawing.Point)(resources.GetObject("comboBox1.Location")));
            this.comboBox1.MaxDropDownItems = ((int)(resources.GetObject("comboBox1.MaxDropDownItems")));
            this.comboBox1.MaxLength = ((int)(resources.GetObject("comboBox1.MaxLength")));
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("comboBox1.RightToLeft")));
            this.comboBox1.Size = ((System.Drawing.Size)(resources.GetObject("comboBox1.Size")));
            this.comboBox1.TabIndex = ((int)(resources.GetObject("comboBox1.TabIndex")));
            this.comboBox1.Text = resources.GetString("comboBox1.Text");
            this.comboBox1.Visible = ((bool)(resources.GetObject("comboBox1.Visible")));
            this.comboBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.MarkerSelector_DrawItem);
// denne kode stammer fra konstruktoren i en klasse der nedarver fra ListBox
this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
this.comboBox1.DrawItem += new DrawItemEventHandler(MarkerSelector_DrawItem);

            //
            // label1
            //
            this.label1.AccessibleDescription = resources.GetString("label1.AccessibleDescription");
            this.label1.AccessibleName = resources.GetString("label1.AccessibleName");
            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("label1.Anchor")));
            this.label1.AutoSize = ((bool)(resources.GetObject("label1.AutoSize")));
            this.label1.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("label1.Dock")));
            this.label1.Enabled = ((bool)(resources.GetObject("label1.Enabled")));
            this.label1.Font = ((System.Drawing.Font)(resources.GetObject("label1.Font")));
            this.label1.Image = ((System.Drawing.Image)(resources.GetObject("label1.Image")));
            this.label1.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("label1.ImageAlign")));
            this.label1.ImageIndex = ((int)(resources.GetObject("label1.ImageIndex")));
            this.label1.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("label1.ImeMode")));
            this.label1.Location = ((System.Drawing.Point)(resources.GetObject("label1.Location")));
            this.label1.Name = "label1";
            this.label1.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("label1.RightToLeft")));
            this.label1.Size = ((System.Drawing.Size)(resources.GetObject("label1.Size")));
            this.label1.TabIndex = ((int)(resources.GetObject("label1.TabIndex")));
            this.label1.Text = resources.GetString("label1.Text");
            this.label1.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("label1.TextAlign")));
            this.label1.Visible = ((bool)(resources.GetObject("label1.Visible")));
            //
            // Main_form
            //
            this.AccessibleDescription = resources.GetString("$this.AccessibleDescription");
            this.AccessibleName = resources.GetString("$this.AccessibleName");
            this.AutoScaleBaseSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScaleBaseSize")));
            this.AutoScroll = ((bool)(resources.GetObject("$this.AutoScroll")));
            this.AutoScrollMargin = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMargin")));
            this.AutoScrollMinSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMinSize")));
            this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
            this.ClientSize = ((System.Drawing.Size)(resources.GetObject("$this.ClientSize")));
            this.Controls.Add(this.label1);
            this.Controls.Add(this.comboBox1);
            this.Enabled = ((bool)(resources.GetObject("$this.Enabled")));
            this.Font = ((System.Drawing.Font)(resources.GetObject("$this.Font")));
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("$this.ImeMode")));
            this.Location = ((System.Drawing.Point)(resources.GetObject("$this.Location")));
            this.MaximumSize = ((System.Drawing.Size)(resources.GetObject("$this.MaximumSize")));
            this.MinimumSize = ((System.Drawing.Size)(resources.GetObject("$this.MinimumSize")));
            this.Name = "Main_form";
            this.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("$this.RightToLeft")));
            this.StartPosition = ((System.Windows.Forms.FormStartPosition)(resources.GetObject("$this.StartPosition")));
            this.Text = resources.GetString("$this.Text");
            this.ResumeLayout(false);

        }
        #endregion

        [STAThread]
        static void Main()
        {
            Application.Run(new Main_form());
        }


        //Følgende metode tegner så hvert item:
        /// <summary>
        /// Draws each item of this MarkerSelector
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MarkerSelector_DrawItem(object sender, DrawItemEventArgs e)
        {       
            if (e.Index >= 0)
            {           
                Graphics g = e.Graphics;
                e.DrawBackground();
                string text = this.comboBox1.Items[e.Index].ToString();   
                SizeF textSize = g.MeasureString(text,this.Font);
                float y = e.Bounds.Top + ((e.Bounds.Height - textSize.Height)/2);
                float x = PAD;

                g.DrawString(text,Font,new SolidBrush(e.ForeColor),x,y);

                PointF [] drawPoint = new PointF[] {new PointF(x/2,e.Bounds.Top + e.Bounds.Height/2) };
                Graph.DrawPoints(g,drawPoint,(Marker)Enum.Parse(typeof(Marker),text),e.ForeColor);
                e.DrawFocusRectangle();
            }

        }
    }
}
Avatar billede _et Praktikant
02. oktober 2005 - 22:39 #3
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester