Laden...

Komponente erstellen, von welcher klasse ableiten?

Erstellt von Adler vor 19 Jahren Letzter Beitrag vor 18 Jahren 2.903 Views
A
Adler Themenstarter:in
47 Beiträge seit 2004
vor 19 Jahren
Komponente erstellen, von welcher klasse ableiten?

Hallo.

Ich möchte eine Textboxähnelnde Komponente erstellen.
Ich weiß nicht wovon ich sie ableiten soll am besten.
Panel hat leider kein KeyDown oder sowas.

ich habe schon einige sources gezogen, da wurds direkt von Textbox gemacht.
möchte aber alles selbst zeichnen, mit Canvas und so.
Also, jemand ne Ahnung? 😉

MfG Meine wenigkeit.
C
1.215 Beiträge seit 2004
vor 19 Jahren

im zweifelsfall von "System.ComponentModel.Component ", würde ich sagen...
oder wenn du dir nicht ganz so viel arbeit machen möchtest von "System.Windows.Forms.Control".

grtz
chief

P
939 Beiträge seit 2003
vor 19 Jahren

Es gibt auch noch System.Windows.Forms.TextBoxBase. Selber zeichnen ist immer möglich.

A
Adler Themenstarter:in
47 Beiträge seit 2004
vor 19 Jahren

Hi!

Also ich bekomms dann net so richtig hin zu erstellen.

        PhpEdit editfeld = new PhpEdit();

        public Form1()
        {
            InitializeComponent();
            editfeld.Visible = true;
            editfeld.Top = 0;
            editfeld.Left = 0;
            editfeld.Width = 300;
            editfeld.Height = 300;
            editfeld.CreateControl();
        }

Hat jemand nen Tutorial parat? 😉

MfG Meine wenigkeit.
K
64 Beiträge seit 2004
vor 19 Jahren

Hi!
Ich nehme mal an, dass das nur Ausschnitte aus dem Gesamtcode sind.
Haste vielleicht


Controls.Add(editfeld);

vergessen?

A
Adler Themenstarter:in
47 Beiträge seit 2004
vor 19 Jahren

Joa, hatte ich vergessen.

Ging auch eben damit (im Constructor Form1)
Jetzt nemmer, der wirfst mich dann immer zur Program.cs ...
kann das auch an dem zu createndem Objekt liegen?

    public class PhpEdit : System.Windows.Forms.Control 
    {
        Graphics g;// = new Graphics();
        System.Drawing.Font font = new System.Drawing.Font("Courier New",10);
        System.Drawing.Brush brush; // = new System.Drawing.Brush();

/// <summary>
/// This Constructor creates the editbox and set Values
/// </summary>
        public PhpEdit()
        {
            this.KeyDown += OnKeyDown ;
            this.Paint += OnPaint;

            //font.FontFamily.IsStyleAvailable 
            
        }

        public void OnKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Escape)
            {

            }
        }

        public void OnPaint(object sender, PaintEventArgs e)
        {
            //g.DrawString("hallo welt", g.
            WriteActuallyChanges();
        }

        public void WriteActuallyChanges()
        {
            Point point = new Point(0, 0);
            g.DrawString("Hallo Welt!", font, brush, point);
        }
    }
MfG Meine wenigkeit.
K
64 Beiträge seit 2004
vor 19 Jahren

Hmm, in dem Code fallen mir gleich mehrere Fehler auf:


this.KeyDown += OnKeyDown ;
this.Paint += OnPaint;

Is 1. schon mal falsch weil es hätte heißen müssen:


this.KeyDown += new KeyEventHandler(meineMethode);

Aber (2.) ist das vorgehen so nicht üblich.
Ich hätte die beiden Zeilen ganz weggelassen und die OnKeyDown und die OnPaint Methode von der Basisklasse überschrieben. Ca. so:


protected override void OnPaint(object sender, PaintEventArgs e)
{
...
}

"e" übergibt dann auch das Graphics- Objekt für dieses Control mit dem du dann Zeichnen kannst


Graphics g = e.Graphics;

Dann ist dir wohl auch schon aufgefallen dass


System.Drawing.Brush brush = new System.Drawing.Brush();

nicht funzt. Das liegt daren das Brush ne abstrakte Klasse ist. So gehts:


System.Drawing.Brush brush = new SolidBrush(Color.Black);

So. Nu haste erstma n bisschen Arbeit 😉

Gruß
Kabaal

A
Adler Themenstarter:in
47 Beiträge seit 2004
vor 19 Jahren

Zeichnen geht 😉

PS: Graphics e kann ich auch auf die Art nutzen wie ich es habe. aber wenns anderst besser ist........

MfG Meine wenigkeit.
A
Adler Themenstarter:in
47 Beiträge seit 2004
vor 19 Jahren

Warum nimmt der keine vk tasten an?
also .Down .Up ... usw.

Von anderen weiß ichs bisher net. Aber das kann doch net sein 😕
denn Keys.Down gibts auch, dann soll das auch im KeyDown los gehen. es wird einfach net ausgeführt.
ich kann so oft und lange ich will auf der taste rumdrücken, passiert nix.

MfG Meine wenigkeit.
A
Adler Themenstarter:in
47 Beiträge seit 2004
vor 19 Jahren

Vielleicht muss ich nochwas bei erstellen der controls beachten?
Es ist doof. die Tasten sind sehr sehr wichtig! 😦

MfG Meine wenigkeit.
4.221 Beiträge seit 2005
vor 18 Jahren

Sondertasten musste doch im OnKeyPress abfangen oder ?

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

P
939 Beiträge seit 2003
vor 18 Jahren

Für spezielle Tasten wie Esc oder die Cursortasten muss IsInputKey oder IsInputChar überschrieben werden.

Schau dir die Doku zu den Methoden an.

Gruss
Pulpapex

// Edit: bin ich doch glatt drauf reingefallen. Programmierhans, kramst du in alten Postings rum? Naja, ich glaube es liegt am IsInputKey.

4.221 Beiträge seit 2005
vor 18 Jahren

nö Pulpalex 😁

Aber es kann ja sein, dass dies in Version 2005 geändert hat.... Habs auch nicht nachgeschaut, aber habe es so in Erinnerung... war eigentlich der Meinung dies sei so...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...