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? 😉
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
Es gibt auch noch System.Windows.Forms.TextBoxBase. Selber zeichnen ist immer möglich.
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? 😉
Hi!
Ich nehme mal an, dass das nur Ausschnitte aus dem Gesamtcode sind.
Haste vielleicht
Controls.Add(editfeld);
vergessen?
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);
}
}
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
Zeichnen geht 😉
PS: Graphics e kann ich auch auf die Art nutzen wie ich es habe. aber wenns anderst besser ist........
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.
Vielleicht muss ich nochwas bei erstellen der controls beachten?
Es ist doof. die Tasten sind sehr sehr wichtig! 😦
Sondertasten musste doch im OnKeyPress abfangen oder ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
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.
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...