danke, die PrintableListView - Klasse ist ganz gut, habs noch ein wenig angepasst...
wie kann ich einen Titel oben drüber schreiben, also wie unten steht ja Page 1..., hät gern dass drüber ein Titel steht
mfg
edit: sache mit dem titel hat sich erledigt, da gibts schon was in der klasse XD
wer lesen kann is klarim vorteil
Hallo Leute,
habe in meinem Programm eine Listview, in der Ergebnissdaten stehen, welche nun auf eine A4 - Seite Querformat gedruckt werden sollen...
Hab aber noch nicht mit drucken gearbeitet und woillte euch mal fragen ob ihr vll nützliche Tuts hab oder mir direkt helfen könnt das umzusetzten.
Ich weis das es ein PrintDocument/Print-/PageSetting Klasse gibt..., viel weiter wes ich aber nicht ^^
mfg
ani
danke, funzt super mit dem SplitContainer
mfg
ani
danke für die mühe, aber wenn ich die zip versuche zu entpacken, gibts nen fehler ("Archiv nicht gefunden...2)
mach ich was falsch oder is des gar kein?
Hallo Leute,
in meinem kleines Programm für die schule, soll eine Hilfe mit rein.
Dazu hab ich eine TextBox genommen, auf der einiges allgemeines erklärt steht und darunter soll nun ein TableLayoutPanel mit 2 spalte (bild + Erklärung) und 6 Zeilen sein.
das mit TableLayoutPanel klappt alles wunderbar, alle Bilder und texte sin so wie ich es haben möchte, einziges Problem ist folgendes:
da es 6 Zeilen sind und die Bilder eine höhe von 250 haben, geht das ganz schön weit runter (1500 gesamt), das form einfach so groß zu machen ist relativ idiotisch, da einer nen Bildschirm ..x1500 hat. XD
daher sollten man einfach Runterscrollen können, geht aber leider nicht, obwohl es auf der TextBox drauf ist.
Ist der Inhalt (text-mäßig) so groß, dass eine ScrollBar auftaucht, und ich dann 'scrolle' bleibt das TableLayoutPanel auf Ort und stelle und bewegt sich nicht.
weis einer wie ich das lösen kann?
mfg
ani
danke @ TmikeB
funzt soweit super...
protected void MenuItemOnSelect (object sender, EventArgs ea) {
if ((sender as MyMenuItem).Enabled && (sender as MyMenuItem).Text != "-")
sbpInfo.Text = (sender as MyMenuItem).InfoText;
else
sbpInfo.Text = infoTextBak;
}
na das is doch das gleiche wie das, ABER:
PS: ich benutz die Stripts nich gern, weil da links immer so ne "Raster-Punkte" sind...
glaub ihr wisst nicht genau was ich meine, das select event benutz ich ja schon:
wenn ein item berührt wird, wird select ausgelöst und der infotext in der statusleiste angezeigt, fährt die maus nun weg von dem item (aber nicht auf ein anderes item, sondern links daneben z.b.) bleibt der infotext stehen, soll aber auf den standard gebracht werden
ja sorry wenn ich mich unverständlich ausgedrückt habe...
Also, ich hab in meinem programm die MainMenu Eingenschaft und eine Statuszeile:
Bilder im Anhang... (erst die BIlder angucken, dann weiterlesen)
Wollte zu dem Zweck, meiner MyMenuItem - Klasse ein Even "UnSelect" hinzufügen, welches ausgelöst wird, wenn ein Item eine "Selection" verliert, also wenn man halt davon weggehn.
Mit den Methoden:
protected override void OnMenuStart (EventArgs ea) {
infoTextBak = sbpInfo.Text;
}
und
protected override void OnMenuComplete (EventArgs ea) {
sbpInfo.Text = infoTextBak;
}
wird der Infotext jeweils auf den StandardText gesetzten/gespeichert...
mit
protected void MenuItemOnSelect (object sender, EventArgs ea) {
if ((sender as MyMenuItem).Enabled && (sender as MyMenuItem).Text != "-")
sbpInfo.Text = (sender as MyMenuItem).InfoText;
}
wird der InfoText auktualisiert, also jeweils angepasst...
hoffe es ist jetzt Verständlicher, falls euch eine andere Lösung einfällt, bin ich für Vorschläge offen
mfg
Ani
Hallo Leute,
zum lernen und teils aus spaß, wollte ich einen kleinen eigenen TextEditor schreiben...
In der Statusleiste unten soll nun immer angezeigt werden, welches menuitem ausgewählt wurde, bzw was dahinter steckt, eine kleine Hilfe sozusagen
mit
EventHandler mitSelectHandler = new EventHandler(MenuItemOnSelect);
foreach (MyMenuItem mi in Menu.MenuItems)
foreach (MyMenuItem mit in mi.MenuItems) {
mit.Select += mitSelectHandler;
}
kann ich gut immer abfangen, wenn ein item selectiert wurde, doch wenn ich nun eines selectiere und dann davon weggehe, bleibt der infotext weiter auf dem alten stand.
ich wollte mir dazu ein Unselect-Event schreiben...
Da ich leider noch nicht viel erfahrung mit selberschreiben von events habe, wollte ich euch einfach mal fragen...
hier meine bisherigen ansätze (Hab das MenuItem auch um eine "HilfeText"-Eigenschaft erweitert...)
public class MyMenuItem : MenuItem {
//Attribute...
protected string hilfeText;
public event EventHandler Unselect;
public delegate void UnselectDelegate (object sender, EventArgs e);
//Properties
public string HilfeText { get; set; }
//Konstruktoren
public MyMenuItem () { }
public MyMenuItem (string text) {
Text = text;
}
public MyMenuItem (string text, EventHandler onClick) {
Text = text;
Click += new EventHandler(onClick);
}
public MyMenuItem (string text, MyMenuItem[] items) {
Text = text;
foreach (MyMenuItem item in items) {
this.MenuItems.Add(item);
}
}
public MyMenuItem (string text, EventHandler onClick, Shortcut shortcut) {
Text = text;
Click += new EventHandler(onClick);
Shortcut = shortcut;
}
}
... und weiter weis ich leider nicht...
mfg
ani
Hallo Leute,
wir haben in der Schule mit Netzwerkprogrammierung angefangen und dazu ein kleines Chat-Programm erstellt, meine Aufgabe war der Server, einzigses, eher kleines, Problem ist, dass ich die TextBox auf der alles ausgegeben wird, gern "nicht-editierbar" hätte, also dass man nicht darauf schreiben kann, aber trotzdem noch markieren kann...
hab bisher immer den focus raus genommen, falls GotOnFosus ausgelöst wird, ist aber unschön...
hoffe ihr könnt mir helfen
mfg
ani
ja stimmt, jetzt wo du es sagst, XD
ja es funktioniert jetzt alles
musste zwar hier und da noch ein wenig rumeiern, aber es geht nun alles supi, vielen dank...
Hi,
so?:
double dataMin = Double.MaxValue;
double dataMax = Double.MinValue;
//Was bewirkt das?
//Und die Rechnung so?:
for (int i = 0; i < data.Length; i++) {
data[i] = (data[i] - dataMin) / factor + min;
}
Der Compiler hat bisher übrigens keine Fehlermeldung oder Warnung dazu ausgegeben.
public override void Anpassen (double min, double max) {
double[] data = { A.X, A.Y, B.X, B.Y, C.X, C.Y, D.X, D.Y, F.X, F.Y, höhe };
double dif;
double dataDif;
double factor;
double dataMin;
double dataMax;
// dataMin und dataMax ermitteln
for (int i = 0; i < data.Length; i++) {
if (data[i] < dataMin) dataMin = data[i];
if (data[i] > dataMax) dataMax = data[i];
}
// differenz ermitteln
dif = max - min;
dataDif = dataMax - dataMin;
// faktor ermitteln
factor = dataDif / dif;
// data umwandeln
for (int i = 0; i < data.Length; i++) {
data[i] = data[i] / factor - dataMin + min;
}
A.X = data[0];
A.Y = data[1];
B.X = data[2];
B.Y = data[3];
C.X = data[4];
C.Y = data[5];
D.X = data[6];
D.Y = data[7];
F.X = data[8];
F.Y = data[9];
höhe = data[10];
}
den code hatte ich auch schon geschrieben, kommt aber auf gleiche raus, also selben anzeigen...
wie meinst genau?
wär doch das gleiche wie mit der errechnen eines faktors und dann alle mal den faktor nehmen, odeR?
ja, die höhe ist enorm groß, viel zu hoch, weis aber nicht warum :<
Hi,
sorry wenn der titel etwas komisch klingt, hatte aber keine bessere idee XD
Ham von der schule aus eine aufgabe bekommen, sollen ein programm schreiben, mit dem man Dreieck, Viereck, Kreis, Quader, Pyramide und Zylinder berechnen kann und jene figuren/körper sollen sich anschließend maßstabsgetreu selbst zeichnen
alles bisher i.o.
nur hab ich jetzt ein kleines problem mit dem quader und der pyramide
um die eingegebenen / berechneten werte zum zeichnen der körper an die "Zeichenoberfläche" anzupassen, hab ich als erstes folgende routine benutzt:
double maxi = GetMaxZahl(A.X, new double[] { A.Y, B.X, B.Y, C.X, C.Y, D.X, D.Y, F.X, F.Y, höhe });
while (maxi < max) {
A.X = A.X * 1.05;
A.Y = A.Y * 1.05;
B.X = B.X * 1.05;
B.Y = B.Y * 1.05;
C.X = C.X * 1.05;
C.Y = C.Y * 1.05;
D.X = D.X * 1.05;
D.Y = D.Y * 1.05;
F.X = F.X * 1.05;
F.Y = F.Y * 1.05;
höhe = höhe * 1.05;
maxi = maxi * 1.05;
}
while (maxi > max) {
A.X = A.X * 0.95;
A.Y = A.Y * 0.95;
B.X = B.X * 0.95;
B.Y = B.Y * 0.95;
C.X = C.X * 0.95;
C.Y = C.Y * 0.95;
D.X = D.X * 0.95;
D.Y = D.Y * 0.95;
F.X = F.X * 0.95;
F.Y = F.Y * 0.95;
höhe = höhe * 0.95;
maxi = maxi * 0.95;
}
A.Y, B.X, B.Y, C.X, C.Y, D.X, D.Y, F.X, F.Y, höhe -> sind die werte, die ich zum zeichnen der pyramide brauche (pyramide jetzt als beispiel)
da hat sich bei mir das problem ergeben, das die höhe immer viel viel zu groß ist und das ganze einem rießen zahnstocher ähnelt.
als zweites hab ich folgende routine gefunden, gleiches problem auch hier:
public override void Anpassen (double min, double max) {
double[] data = { A.X, A.Y, B.X, B.Y, C.X, C.Y, D.X, D.Y, F.X, F.Y, höhe };
double dif;
double dataDif;
double factor;
double dataMin;
double dataMax;
// dataMin und dataMax ermitteln
for (int i = 0; i < data.Length; i++) {
if (data[i] < dataMin) dataMin = data[i];
if (data[i] > dataMax) dataMax = data[i];
}
// differenz ermitteln
dif = max - min;
dataDif = dataMax - dataMin;
// faktor ermitteln
factor = dataDif / dif;
// data umwandeln
for (int i = 0; i < data.Length; i++) {
data[i] = data[i] / factor - dataMin + min;
}
A.X = data[0];
A.Y = data[1];
B.X = data[2];
B.Y = data[3];
C.X = data[4];
C.Y = data[5];
D.X = data[6];
D.Y = data[7];
F.X = data[8];
F.Y = data[9];
höhe = data[10];
}
an was könnte das liegen?
beim quader hab ich folgendes problem:
hier erstmal die routine zum anpassen an die oberfläche:
public override void Anpassen (double min, double max) {
double maxi = GetMaxZahl(Q1.X, new double[] { Q1.Y, Q2.X, Q2.Y, height, width });
while (maxi < max) {
Q1.X = Q1.X * 1.05;
Q1.Y = Q1.Y * 1.05;
Q2.X = Q2.X * 1.05;
Q2.Y = Q2.Y * 1.05;
height = height * 1.05;
width = width * 1.05;
maxi = maxi * 1.05;
}
while (maxi > max) {
Q1.X = Q1.X * 0.95;
Q1.Y = Q1.Y * 0.95;
Q2.X = Q2.X * 0.95;
Q2.Y = Q2.Y * 0.95;
height = height * 0.95;
width = width * 0.95;
maxi = maxi * 0.95;
}
}
das problem ist nun, sobald ich das fenster worin der körper gezeichnet wird, vergrößere oder verkleinere, laden alle eckpunkte auf der X-Achse also die Y-Werte werden scheinbar zu 0
mit der anderen routine gehts auch nich anders zu
mfg
ani
danke für die antworten, hab mit
.ToString("#.000")
gemahct und es funzt super
danköö
mfg
ani
hallo leute,
hab bei meinem programm labels, die immer wieder mal geändert werden, und die double wrde übergeben bekommen
nun sin double werte ja nich gerade kurz( also nach dem komma), sollte daher mit string.format()... einstellen, dass nur 3 stellen nach dem komma angezeigt werden
aber de mist will das nicht akzeptieren und schreib immer alles voll aus.
bitte um hilfe
mfg
ani
geht beides nicht
bzw. es ist schon eingebunden und es meckert trotzdem rum...
Hallo Leute,
für mein Prog. hab ich einen eigenen kleinen Cursor gemacht, de rnur in einer bestimmten situation zum tragen kommt, hab gelesen, dass man mit:
this.Cursor = new Cursor(GetType(), "MyTest2.ani");
das realisieren kann, aber der sagt mir immer, dass der " ...Objektverweis wurde nicht auf eine Objektinstanz festgelegt..." wurde.
mfg
ani
danke für die Anregungen, es geht...
mfg
ani
Hallo leute,
ich weis leider nicht ganz, wo ich die frage hinpacken soll.
ich möchte ein kleines "VierGewinnt"-Spiel schreiben, horizontale/vertikale felder sollen variabel sein...
hab eigentlich schon alles, ich müsste nun nur noch irgendwie prüfen, wann 4 in vertikaler/horizontaler/diagonaler reihe sind.
die einzelnen zellen sind in einem 2D-Array gespeichert.
könnt ich mir vll helfen wie man matrizen... durchsucht?
mfg
ani
Form bleibt weiß
hab den koordinatennullpunkt verschoben, daher müssten die punkte eigentlich sichtbare sein.
kannst mal bitte code dazu zeigen?
Pen p2 = new Pen(new LinearGradientBrush(new Point(0, 0), new Point(200, -200), Color.Black, Color.LightGray));
e.Graphics.DrawLine(p2, new Point(50, -50), new Point(100, -100));
geht irgendwie nich -.-
Hallo leute,
kann man Linien auch mit Farbverlauf erstellen?
Ich hab bis jetzt nur gefunden, wie man Rechtecke mit diagonalen oder linearen Farbverlauf zeichnet, sonst nichts...
mfg
Ani
ok danke, das war hilfreich, hat vll auch jmd eine idee zu der zweiten sache?
hallo,
ich hab eine anwendung, bei der man verschiedene geometrische formen auswählen kann, dazu bestimmte werden eingeben muss und anschließend soll die Form inklusive Beschriftung (die eckpunkte A,B,C,...) gezeichnet werden.
Da der Benutzer jeden beliebigen Wert von 0 bis weis der Geier eingeben kann, wollt ich so machen, dass die X/Y-Werte der Zeichenoberfläche angepasst werden.
Ich mach das momentan so:
X/Y-Werte solange kleiner bzw. größer machen, bis der größte X bzw. Y-Wert etwas unter dem Maximum des Randes der Zeichenoberfläche liegt.
habt ihr da vll eine Lösung, wie das etwas eleganter geht?
zum zweiten:
ich würde die Ecken gern jeweils beschriften, also mit A,B,C,..., wie schon erwähnt.
Nur wenn ich das einfach so an die Position des X/Y-Wertes des jeweiligen Punktes packe, sieht das sicher nicht grad schön aus, wie könnte man da an eine "Beschriftungs-Logik" rangehen, die erkennt wo sie was hinsetzten muss?
also dann die Buchstaben nicht übern rand gehn, bzw die linien der figur/ des körpers berühren...
mfg
ani
danke für deine hilfe, funzt alles
mfg
ani
danke für den link
hab ihn mir durchgelesen
du benutzt bei deinem ersten bsp eine Liste, wo die ganzen grafischen Objekte reinkommen, wenn ich das richtig sehe ist das so ein generic-dings, da wir das in der Schule noch nicht hatten, haste da vll auch einen Link zu, wo ich mir da mal was durchlesen kann?
Zum Problem:
Die Anwendung ist eine Aufgabe von der Schule, da soll man eine bestimmte geometrische Form wählen, dazu Grundwerte eingeben... und diese Form soll dann gezeichnet und Beschriftet werden.
Für jede Form hab ich eine eigene Klasse gemacht und wenn eine bestimme Form angeklickt wurde, wird dort in dem Click-Event ein Objekt von der Form erzeugt.
Die Werte die man angegeben hat werden übergeben und dann berechnet das Objekt erstens Werte wie Fläche, Umfang..., als nächstes soll es anhand der eingegebenen Werte und der Zeichenoberfläche einen passenden Maßstab finden und sich anschließend in diesem Maßstab zeichnen.
Also müsste ich, wenn das Objekt alles berechnet hat, die Form nur noch der "Graphik-Liste" hinzufügen, und das neuzeichnen mit Invalidate anstoßen, hab ich das so richtig verstanden?
mfg
ani
egal wie ich auf die pictureBox zeichnen will, der fehler kommt immer wieder
das graphic objekt kommt vom MainForm, es wird im Konstruktor erzeugt... und dann später einfach übergeben
meinst daS?
wenn ich wieder auf panel umstelle gehts wieder
wenn ich die "zeichnen"-methode aus anderen objekten heraus aufrufe, kommt die fehlermeldung auch
ja
muss vll dazusagen, als erstes hatte ich auch oberfläche ein Panel, da ging auch alles mit zeichnen, nur hab dann aus bestimmten gründen eine PictureBox genommen, un dann war auf einmal dieser fehler da
protected Pen stift;
nich mehr
die Eigentschaft kommt aus einer "Basis"-Klasse
g.DrawPolygon(stift, new PointF[] { A_, B_, C_ });
gleiche fehlermeldung
hi
ich benutz MSVS08
'Fehlermeldung siehe Anhang'
als "Zeichenoberfläche" dient eine PictureBox
was könnte mit der Fehlermeldung gemeint sein?
MS ist da ja mal wieder sehr ausführlich bei ihrere Aussage...
mfg
ani
naja, die frage is ja, wie ich die neuen an die seite von dem ersten bekommen, also so untereinander, bzw nebeneinander...
hallo leute,
ich möchte gern, dass wenn mein form1 ein weiteres form einer bestimmten art erstellt, dieses weitere an das erste geheftet wird, undzwar folgendermaßen:
|........|frm2..|frm4..|
|frm1.|||
|........|frm3..|frmN..|
|____ |||
so in die richtung soll das am ende aussehen, also dass immer wenn ein nächstes form von einer bestimmten art erstellt wird, dieses so in der form da angehängt wird.
is das verständlich? ^^
ich hab versucht mit
:: PseusoCode ::
nextFrm.Location = new Point(mainForm.Location.X + mainForm.Width, mainForm.Location.Y + mainForm.Height)
versucht die postion für das erste neue form zu finden, aber ist dann irgendwie trotzdem wo anders
mfg
ani
hallo leute,
ich bin gerade dabei mir ein kleines programm zu schreiben.
dabei hab ich 2 Forms (Form1 und NewProg).
meine erste frage: wenn ich aus Form1 heraus das NewProg Form starten will, dann mach ich das doch mit:
Form frm = new NewProg();
Application.Run(frm);(frm);
oder?
meine zweite frage:
wenn ich von form1 aus auf das NewProg Form zugreifn will, dann mach ich das doch mit:
Prog_Pfad.AddToView(NewProg.txtBrowse.Text, listView1, txtLog.Text);
richtig?
bei mir gibt der immer die fehlermeldung:
Der Zugriff auf "Programm_Manager.NewProg.txtBrowse" ist aufgrund der Sicherheitsebene nicht möglich.
was mach ich falsch?
mfg
ani