ListBox - Image



  • hallo!

    [Sry. dass ich so viel frage]

    Ich arbeite zzt an einer (HTML-Editor)MDI-Anwendung. Nun möchte ich folgendes realisieren:

    Der User klickt im main-menu z.b. auf 'Einfügen - Frames', und es öffnet sich eine neue Form, auf der eine ListBox-Komponente platziert ist. Dort wählt der user, das betreffende Frameset aus und klickt auf 'OK'. Nun wird der code des Framesets in dem gerade aktiven MDI-Kind-Formular eingefügt.

    Dazu habe ich nun einige Fragen:
    (1.) Ich finde nirgendwo im internet eine hilfe dazu, wie ich bilder in eine listbox hineinbekomme. - weiß jemand von euch, wie das geht?
    (2.) Um den Code jetzt einzufügen habe ich mir folgendes vorgestellt:
    Wenn der User auf 'OK' klickt, wird je nach gerade selektiertem Image einer membervariable ein bestimmter wert zugewiesen. dieser wird an das MDI-Eltern-Formular gesendet, und dort in mehreren if anweisungen verglichen. wurde die passende gefunden, wird in dieser das gerade aktive MDI-Kind-RichTextBox-Element ermittelt und in diesem an der aktuellen cursorposition der quellcode des framesets eingefügt.

    Ist diese oben genannte (2.) 'Logik' richtig, bzw. kann das funktionieren, oder würdet ihr das grundsätzlich anders machen?

    Bin dankbar für antworten!

    mlg
    azok



  • Hi,

    zu (1):

    ein ausbaubares Beispiel:

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    
    namespace WindowsApplication1
    {
    	/// <summary>
    	/// Zusammenfassung für Form1.
    	/// </summary>
    	public class Form1 : System.Windows.Forms.Form
    	{
    		private System.Windows.Forms.ListBox listBox1;
    		private System.Windows.Forms.ImageList imageList1;
    		private System.ComponentModel.IContainer components;
    
    		public Form1()
    		{
    			//
    			// Erforderlich für die Windows Form-Designerunterstützung
    			//
    			InitializeComponent();
    
    			//
    			// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
    			//
    		}
    
    		/// <summary>
    		/// Die verwendeten Ressourcen bereinigen.
    		/// </summary>
    		protected override void Dispose( bool disposing )
    		{
    			if( disposing )
    			{
    				if (components != null) 
    				{
    					components.Dispose();
    				}
    			}
    			base.Dispose( disposing );
    		}
    
    		#region Vom Windows Form-Designer generierter Code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung. 
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		private void InitializeComponent()
    		{
    			this.components = new System.ComponentModel.Container();
    			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
    			this.listBox1 = new System.Windows.Forms.ListBox();
    			this.imageList1 = new System.Windows.Forms.ImageList(this.components);
    			this.SuspendLayout();
    			// 
    			// listBox1
    			// 
    			this.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
    			this.listBox1.Items.AddRange(new object[] {
    														  "s",
    														  "s"});
    			this.listBox1.Location = new System.Drawing.Point(40, 32);
    			this.listBox1.Name = "listBox1";
    			this.listBox1.Size = new System.Drawing.Size(144, 121);
    			this.listBox1.TabIndex = 0;
    			this.listBox1.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.listBox1_MeasureItem);
    			this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
    			// 
    			// imageList1
    			// 
    			this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
    			this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
    			this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
    			// 
    			// Form1
    			// 
    			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    			this.ClientSize = new System.Drawing.Size(292, 266);
    			this.Controls.Add(this.listBox1);
    			this.Name = "Form1";
    			this.Text = "Form1";
    			this.ResumeLayout(false);
    
    		}
    		#endregion
    
    		/// <summary>
    		/// Der Haupteinstiegspunkt für die Anwendung.
    		/// </summary>
    		[STAThread]
    		static void Main() 
    		{
    			Application.Run(new Form1());
    		}
    
    		private void listBox1_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
    		{
    			int maxHight=0;
    			int maxWidth=0;
    			foreach(System.Drawing.Image image in imageList1.Images)
    			{
    				maxWidth=Math.Max(maxWidth,image.Width);
    			}
    			e.ItemWidth=maxWidth;
    			if(e.Index < imageList1.Images.Count)
    			{
    				e.ItemHeight=imageList1.Images[e.Index].Height;
    			}
    
    		}
    
    		private void listBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
    		{
    			if(e.Index>imageList1.Images.Count)
    				return;
    
    			System.Drawing.Image image= imageList1.Images[e.Index];
    			e.Graphics.DrawImage(image,e.Bounds.Left,e.Bounds.Top);
    
    		}
    	}
    
    }
    

    zu (2): hab ich nicht recht verstanden

    Gruß
    AndreasW


Anmelden zum Antworten