In C gab es eine wunderschöne Funktion PointInRect, um zu überprüfen, ob sich ein Punkt innerhalb eines Rechteckes befindet! Gibt es eine solche Funktion auch im .NET Framework?
Ja System.Windows.Forms ist in den Referenzen drinnen!
Wenn ich meinen Code compilliere kommt ein Fehler weger folgender Codezeile:
ListViewSubItem itmSub = null;
Der Fehler lautet folgendermassen:
Error 3 The type or namespace name 'ListViewSubItem' could not be found (are you missing a using directive or an assembly reference?) d:\Visual Studio 2005\Projects\QAS\QAS\FRM_SelectPicture.cs 36 4 QAS
In der MSDN - Doku habe ich nachgelesen, dass diesese Klasse das Assembly System.Windows.Forms benötigt, dieses habe ich jedoch bereits mit dem Schlüsselwort using eingebunden.
Woran liegt der Fehler?
Gruss Ishildur
Hallo zusammen, ich habe folgende Aufgabe:
Nun die Fragen:
Lg Ishildur
Hallo zusammen, wie kann ich ein halbtransparentes Rechteck zeichnen?
Gibt es dazu ein bestimmtes Brush?
e.Graphics.FillRectangle(new <<<?>>>,rctSel);
Lg Ishildur
Hi Leute, ich bins nochmal! Bereits zum 3. Mal stelle ich hier die Frage, wie man in C# Bitfelder auslesen kann. Dabei habe ich den Eindruck bekommen, dass die meissten hier gar nicht wissen, um was es sich bei einem Bitfeld handelt. Dazu folgende Erklährung:
Bitfelder können im Gegensatz zu Enumerationskonstanten mit der bitweisen OR-Operation kombiniert werden.
Bitfelder werden im Allgemeinen für Aufzählungen von Elementen verwendet, die zusammen auftreten können, während Enumerationskonstanten gewöhnlich für Aufzählungen von Elementen verwendet werden, die sich gegenseitig ausschließen. Bitfelder sind daher im Gegensatz zu Enumerationskonstanten dazu vorgesehen, zusammen mit der bitweisen OR-Kombination unbenannte Werte zu generieren. Bitfeldern werden in verschiedenen Programmiersprachen im Gegensatz zu Enumerationskonstanten unterschiedlich verwendet.
Also, das Auslesen kann ja wohl in einer modernen Hochsprache wie C# doch wohl unmöglich so auszusehen haben !? 8o 8o 8o
bool bAlpha = (img.Flags & ImageFlags.HasAlpha) == ImageFlags.HasAlpha;
Kommt mir bitte, bitte, bitte nicht wieder mit "verwende doch &&"!!!
&& entspricht nicht &
&& ist eine logische AND - Verknüpfung zweier unabhängier booleanischer Ausdrücke, während & eine bitweise Verknüpfung zweier nummerischer Werte bewirkt.
Wer also den Unterschied zwischen diese beiden Operatoren nicht genauestens kennt, soll bitte besser nicht Antworten....
@ikaros
Deine Variante funktioniert, dass glaube ich! Es stellt sich nur die Frage, ob dies in .NET und C# 2.0 nicht einen eleganteren Weg gibt ? X(
Leute, Leute
Hand aufs Herz, wer von euch hat schon einmal C oder C++ programmiert?
Flags ist ein Bitfeld, welches auch mehrere Werte beinhalten kann. Bsp.
img.Flags = ImageFlags.ColorSpaceRgb | ImageFlags.HasAlpha | ImageFlags.HasTranslucent;
Wenn ich nun wissen will, ob das Bild Alpha - Informationen beinhaltet kann ich ja wohl kaum if(img.Flags == ImageFlags.HasAlpha) schreiben, denn ansonsten wird nur true zurückgegeben, wenn es nur Alpha aber keine Translucent Informationen beinhaltet.
For example, if the Flags property for an image returned 77960, the ImageFlags for the image would be ReadOnly, HasRealDpi, HasRealPixelSize, ColorSpaceYcbcr, and PartiallyScalable.
Also echt jetzt, entweder bin ich völlig behämmert, oder ihr habt nicht wirklich eine Ahnung, von was ihr da redet... 🙄
Hallo Leute, wieso zum Teufel kann ich folgenden Code nicht kompillieren?
// determine the color - range
if((img.Flags & ImageFlags.ColorSpaceRgb) == ImageFlags.ColorSpaceRgb) strClr = "RGB";
else if((img.Flags & ImageFlags.ColorSpaceCmyk) == ImageFlags.ColorSpaceCmyk) strClr = "CMYK";
else if((img.Flags & ImageFlags.ColorSpaceGray) == ImageFlags.ColorSpaceGray) strClr = "GRAY";
else if((img.Flags & ImageFlags.ColorSpaceYcbcr) == ImageFlags.ColorSpaceYcbcr) strClr = "YCBCR";
else if((img.Flags & ImageFlags.ColorSpaceYcck) == ImageFlags.ColorSpaceYcck) strClr = "YCCK";
// check for the alpha - value
bAlp = (img.Flags & ImageFlags.Alpha) == ImageFlags.HasAlpha;
Fehler: Error 3 Operator '&' cannot be applied to operands of type 'int' and 'System.Drawing.Imaging.ImageFlags' d:\Visual Studio 2005\Projects\QAS\QAS\FRM_SelectPicture.cs 105 11 QAS
Was soll denn dass ? 🤔
Bist du sicher, dass es kein Bitfeld ist? Wieso hat es dann Felder wie Alpha, Indexed und Gdi usw... Diese werden doch zusammen mit den Farbformaten gesetzt?
Wieso würde es in die Hose gehen, wenn es ein Bitfeld wäre resp. was müsste ich denn anders machen?
Lg Ishildur
String strTyp = null,strFmt = null;
if((img.Pixelformat & PixelFormat.Format1bppIndexed) > 0) strFmt = "1-Bit (Indexed)";
else if((img.Pixelformat & PixelFormat.Format4bppIndexed) > 0) strFmt = "4-Bit (Indexed)";
usw...
if(img.RawFormat.Equals(ImageFormat.Bmp)) strTyp = "Bitmap";
else if(img.RawFormat.Equals(ImageFormat.Png)) strTyp = "Portable Network Graphic";
usw...
Gib es da nicht andere, elegantere Möglichkeiten, um Bitfelder auszulesen? Da kann ich ja genausogut bei C bleiben...
Nein, ich meine nicht "nested transactions" sondern parallele Transaktionen, genauso wie ichs geschrieben habe... 😁
Ich habe bspw. eine Tabelle mit Ländern und eine Tabelle mit Kunden, welche auf die Ländertabelle zeigt. Nun bin ich bspw. gerade dabei, die Kundentabelle zu bearbeiten und habe hierfür eine Transaktion gestartet. Nun möchte ich in der Ländertabelle noch schnell in einer "parallelen" Transaktion einen Entrag hinzufügen, ohne dass ich vorher die Transaktion der Usertabelle beenden muss!
this.sqlCon.BeginTransaction();
this.sqlCon.BeginTransaction();
SqlConnection does not support parallel transactions.
Lg Ishildur
Hallo zusammen, weiss jemand von euch, wie ich erreichen kann, dass parallele Transaktionen zugelassen werden?
Ich muss bspw. eine Transaktion starten, um einen Kunden zu bearbeiten, und schliesslich eine weitere (Unter) - Transaktion, um dessen Zahlungen zu bearbeiten...
Lg Ishildur
Hallo zusammne, weiss jemand von euch, wie ich ein Bitmap in ein Byte - Array umwandeln kann, so dass dieses nur noch die Bilddaten enthält??
Gibt das keine einfachere Möglichkeit? 8o
Ich habe eben relativ viele Databindings:
// bind the input - fields
this.tbxID.DataBindings.Add("Text",dtaSrc,"Person_ID");
this.tbxPre.DataBindings.Add("Text",dtaSrc,"Prename");
this.tbxNme.DataBindings.Add("Text",dtaSrc,"Name");
this.dbxBrd.DataBindings.Add("Text",dtaSrc,"Birthdate");
this.tbxPrf.DataBindings.Add("Text",dtaSrc,"Profession");
this.tbxAhv.DataBindings.Add("Text",dtaSrc,"AHV");
this.tbxCon.DataBindings.Add("Text",dtaSrc,"Conto");
this.tbxBnk.DataBindings.Add("Text",dtaSrc,"Bank");
this.picPrs.DataBindings.Add("Image",dtaSrc,"Picture");
this.tbxAdr.DataBindings.Add("Text",dtaSrc,"Adress");
this.tbxZip.DataBindings.Add("Text",dtaSrc,"Zip");
this.tbxPlc.DataBindings.Add("Text",dtaSrc,"Place");
this.tbxCas.DataBindings.Add("Text",dtaSrc,"Postcase");
this.tbxTelBsi.DataBindings.Add("Text",dtaSrc,"TelBusi");
this.tbxTelPrv.DataBindings.Add("Text",dtaSrc,"TelPriv");
this.tbxFaxBsi.DataBindings.Add("Text",dtaSrc,"FaxBusi");
this.tbxFaxPrv.DataBindings.Add("Text",dtaSrc,"FaxPriv");
this.tbxMobBsi.DataBindings.Add("Text",dtaSrc,"MobBusi");
this.tbxMobPrv.DataBindings.Add("Text",dtaSrc,"MobPriv");
this.tbxMaiBsi.DataBindings.Add("Text",dtaSrc,"MailBusi");
this.tbxMaiPrv.DataBindings.Add("Text",dtaSrc,"MailPriv");
this.tbxWeb.DataBindings.Add("Text",dtaSrc,"Website");
this.cbxCty.DataBindings.Add("SelectedValue",dtaSrc,"Country_ID");
this.cbxTit.DataBindings.Add("SelectedIndex",dtaSrc,"Title");
this.cbxZvl.DataBindings.Add("SelectedIndex",dtaSrc,"Zivilstate");
// fill in the country - combobox with all countries
this.cbxCty.DataSource = dtaSet.Tables[1];
this.cbxCty.DisplayMember = "Name";
this.cbxCty.ValueMember = "Country_ID";
Hallo zusammen folgendes funktioniert ja recht gut
this.cbxZvl.DataBindings.Add("SelectedIndex",dtaSrc,"Zivilstate");
falls, und nur falls auf der Datenbank das entsprechende Feld nicht DBNull ist. Wie kann ich erreichen, dass, wenn dies der Fall ist, bspw. eine leere Zeichenkette in die Textbox resp. ein 0 in den SelectedValue geschrieben wird. Momentan wird noch folgende Exception ausgelöst:
Object cannot be cast from DBNull to other types
Lg Ishildur
SelectedValue habe ich zuerst versucht, jedoch ändert er den Value leider nicht, resp. ist dieser immer 0!
ArgumentException
Cannot bind to the new value member.
Parameter name: value
Wieso löst der folgende Code eine Exception aus, das kann ich nun gar nicht verstehen 🤔
this.cbxCty.DataSource = dtaSet.Tables[1];
this.cbxCty.DisplayMember = "Name";
this.cbxCty.ValueMember = "Country_ID";
this.cbxCty.DataBindings.Add("ValueMember",dtaSrc,"Country_ID");
Ist schon eine erstaunliche API !!! 🙂 🙂 🙂
Weiss du vielleicht auch, wie ich einen gerade neu hinzugefügten Datensatz auswählen kann?
this.dtaSet.Tables[0].Add(this.dtaSet.Tables[0].NewRow());
Nun ist der neue Eintrag zwar eingefügt, aber noch nicht ausgewählt. Ausserdem passiert leider nichts, wenn ich mit dem Navigator den nächsten Datensatz auswähle, dann ändern sich die Werte in den Eingabefeldern nicht?
Hey, das ist ja suuuuuper genial!!! Gibts etwas ähnliches für Textboxes?
Hallo Leute, gibt es in Visual C# .NET 2005 nicht so eine Art SqlCombobox, wo ich einfach eine DataTable und eine Spalte definieren kann, und dann wird diese automatisch aktualisiert?
Dasselbe währe natürlich ebenfalls toll für Eingabefelder usw...
Hallo zusammen
Ich entwickle momentan mit Microsoft Visual Studio 2005 Beta 2 Team Edition. Zwar laufen die Programme natürlich auf meinem Computer, jedoch nur auf meinem. Ich habe auf den anderen Computern das aktuelle .NET Framework 2.0 Redistributable installiert. Leider stürzt dort das Programm von Anfang an ab!
Was ist denn nun die aktuelle Entwicklerversion und woher bekomme ich es?
Gruss Ishildur
Ja, er sortiert es zwar, jedoch fügt er dann immer neue Einträge zuobert ein anstatt zuunterst... ?
Hallo zusammen, wie kann ich denn ein DataGridView sortieren? Ich möchte, dass mein DataGridView nache jedem neuen Datensatz resp. nach jeder Änderung neu sortiert wird!
@Michael
Ich glaube, du hast meine Frage missverstanden:
Anstatt
if(exp.Number == 0x3ed) doSomeSpecialStuff();
möchte ich bspw. so schreiben:
if(exp.Number == SqlNumber.ConnectionAborted) doSomeSpecialStuff()
Hallo zusammen, ich habe folgende Frage: Gibt es für die SqlException.Number keine Konstantenliste?
// ------------------------ event - handler for the menu - action edt -----------------------
private void del_Click(object sender,EventArgs e) {
// start a loop for deleting each selected row
foreach(DataGridViewRow row in this.dtaViw.SelectedRows)
((DataRowView)row.DataBoundItem).Delete();
// open a try - statement as there may occure an exception
try {
// try to update the database
this.sqlAdp.Update(this.sqlSet.Tables[0]);
}
// an exception occured
catch(SqlException exp){
// reject all changes
this.sqlSet.RejectChanges(); // ####### Changed ##########
// check if there is a problem with the referencial integrity
if(exp.Number == 0x223){
String strExp = "Mindestens einer der ausgewählten Länder wird momentan verwendet und ";
strExp += "kann nicht entfernt werden!";
MessageBox.Show(strExp,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
// otherwise the database is inconsistent
else{
String strExp = "Die gewünschte Operation kann nicht ausgeführt werden, weil die ";
strExp += "Datenbankstruktur ungültig oder beschädigt ist!";
MessageBox.Show(strExp,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
// ------------------------------------------------------------------------------------------
So gehts !!
Ich habe aber noch eine andere Frage:
Das DataGridView zeigt immer einen Eintrag zuviel, also zuunterst noch eine leehre Zeile, woran liegt das bzw. kann ich das verhindern?
an dieser stelle ist dein datensatz im datagrid bereits gelöscht
Das ist richtig, aber auf der Datenbank und im Dataset usw. sollte er ja nicht gelöscht sein, also müsste ich doch nur das DataGridView aktualisieren und schwupps, sollte der Datensatz wieder da sein. DataGridView::update hat aber leider nicht den gewünschten Effekt gebracht...
Hallo zusammen, wie der Titel bereits sagt, habe ich ein Problem mit der Referentiellen Integrität. Das Problem ist dies, dass zwar eine Exception geworfen wird, jedoch wird der Datensatz im DataGridView dennoch gelöscht? Wie kann ich das verhindern, bzw. was ist an folgendem Code falsch?
// ------------------------ event - handler for the menu - action edt -----------------------
private void del_Click(object sender,EventArgs e) {
// start a loop for deleting each selected row
foreach(DataGridViewRow row in this.dtaViw.SelectedRows)
((DataRowView)row.DataBoundItem).Delete();
// open a try - statement as there may occure an exception
try {
// try to update the database
this.sqlAdp.Update(this.sqlSet.Tables[0]);
}
// an exception occured
catch(SqlException exp){
// check if there is a problem with the referencial integrity
if(exp.Number == 0x223){
String strExp = "Mindestens einer der ausgewählten Länder wird momentan verwendet und ";
strExp += "kann nicht entfernt werden!";
MessageBox.Show(strExp,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
// otherwise the database is inconsistent
else{
String strExp = "Die gewünschte Operation kann nicht ausgeführt werden, weil die ";
strExp += "Datenbankstruktur ungültig oder beschädigt ist!";
MessageBox.Show(strExp,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
// ------------------------------------------------------------------------------------------
Etwas habe ich noch herausgefunden:
BeginEdit wirft zwar keine Exception, gibt aber immer false zurück, woran könnte das liegen?
Ich habe die Beta2 und es ist leider nicht Readonly... 🙁
Naja, es ist eigentlich ganz simpel: Ich möchte, dass wenn ich einen bestimmten Button drücke, das ich einen Datesatz im DataGridView verändern, bzw. neu erstellen kann!
private void add_Click(object sender,EventArgs e) {
this.sqlSet.Tables[0].Rows.Add(this.sqlSet.Tables[0].NewRow());
foreach(DataGridViewCell celCur in this.dtaViw.SelectedCells)
celCur.Selected = false;
this.dtaViw.Rows[this.dtaViw.Rows.Count-1].Selected = true;
this.dtaViw.BeginEdit(true);
}
private void edt_Click(object sender,EventArgs e) {
this.dtaViw.BeginEdit(true);
}
Das Ganze erscheint mir auch recht umständlich, ich mach vermutlich das meisste falsch? X(
Ja, du hast Recht, allerdings passiert leider einfach nichts, wenn ich diese Funktion aufrufe. Ich habe auch versucht, das BeginEdit von vom DataSet aufzurufen, aber das hat leider auch keinen Effekt! Was könnte ich falsch machen?
Hallo zusammen, wie kann ich eine bestimmte Zelle eines DataGridView in den Edit - Modus versetzen, irgendwie finde ich keine BeginEdit - Methode wie es zum Beispiel ein ListView - Controll kennt!
Nun ja, ich meine auch nicht in C# sondern in C++
Hallo zusammen, weiss jemand von euch, wie ich erreiche, dass der Compiler nicht mehr die Unicode Funktionen nimmt? Bsw. Ich rufe die Funktion LoadString auf, der Compiler jedoch ruft die Funktion LoadStringW auf. Wie kann ich das verhindern? Ich glaube, ich muss irgendwo eine Compilerkonstante setzen, aber welche?
Gruss Ishildur
Also ich habs jetzt folgendermassen gelöst, aber muss dass denn sein?
// create the parameters for the insert and update commands
SqlParameter[][] sqlPrm = new SqlParameter[2][];
// start a loop for walking each command
for(int i=0;i<2;++i) {
// create a new array of parameters for the current command
sqlPrm[i] = new SqlParameter[this.sqlSet.Tables[0].Columns.Count];
// start a loop for walking each column
for(int k=0;k<this.sqlSet.Tables[0].Columns.Count;++k) {
// create and setup a new parameter for the current column
sqlPrm[i][k] = new SqlParameter();
sqlPrm[i][k].ParameterName = this.sqlSet.Tables[0].Columns[k].Caption;
sqlPrm[i][k].SourceColumn = this.sqlSet.Tables[0].Columns[k].Caption;
}
}
Hey FZelle
Das FUNKTIONIERT!!!!!!!!!!!!!!!!!!
Man braucht nichtmal das SELECT hineinzuschreiben! Anscheinend hatten die Entwickler von Microsoft an diese Situation gedacht und so implementiert, dass die Update - Methode des Dataadapters das IDENTITY als Schlüsselwort erkennt!!
Vielleicht wäre das etwas für die FAQ, denn diese Form kann die Entwicklung massiv vereinfachen!!!
🙂 🙂 🙂 👍 👍 👍
8o ADO .NET ist ja... ja.... GEEEEEEIIIIILLLLLL
// define and create an insert - command
String strIns = "INSERT INTO Person(Title,Name,Prename,Birthdate,Adress,Zip,Place,";
strIns += "Country_ID,TelPriv,TelBusi,FaxPriv,FaxBusi,MobPriv,MobBusi,MailPriv,MailBusi,";
strIns += "Website,JoinDate) VALUES(@Title,@Name,@Prename,@Birthdate,@Adress,@Zip,";
strIns += "@Place,@Country_ID,@TelPriv,@TelBusi,@FaxPriv,@FaxBusi,@MobPriv,@MobBusi,";
strIns += "@MailPriv,@MailBusi,@Website,@JoinDate);INSERT INTO Customer(Person_ID,";
strIns += "Corporation,Travel,Mailing) VALUES(@@IDENTITY,@Corporation,@Travel,@Mailing)";
this.sqlAdp.InsertCommand = new SqlCommand(strIns,this.sqlCon);
Und wie mache ich dies in der Update Methode? Das ist eigentlich das, was ich die ganze zu Fragen versuche! Es kommt ja sehr oft vor, dass man ein DataViewGrid aus mehreren Physikalischen Tabellen auf der Datenbank zusammenführt, und wenn der Benutzer schliesslich die Werte dieses Grids ändern, dann muss man ja auch mit Hilfe der InsertCommand sowie UpdateCommand neue Datensätze hinzufügen, resp. vorhandene bearbeiten können??
Naja, ich hätte mir gewünscht, dass er die Parameter automatisch erzeugt und ich nur noch die Eigenschaften festlegen müsste:
foreach(DataColumn col in this.sqlSet.Tables[0].Columns)
cmdIns.Parameters[col.Caption].SourceColumn = col.Caption;
Ich habe auch folgendes versucht
foreach(DataColumn col in this.sqlSet.Tables[0].Columns){
SqlParameter sqlPrm = cmdIns.CreateParamameter();
sqlPrm.ParameterName = sqlPrm.SourceColumn = col.Caption;
}
Nur leider ist der entsprechende Parameter dann noch nicht zugewiesen, wie man es eigentlich erwarten würde. Wie folgendes Performance - Technisch aussieht, weiss ich nicht?
foreach(DataColumn col in this.sqlSet.Tables[0].Columns){
SqlParameter sqlPrm = cmdIns.CreateParamameter();
sqlPrm.ParameterName = sqlPrm.SourceColumn = col.Caption;
cmdIns.AddRange(new SqlParameter[]{sqlPrm});
}
Gibst da wirklich nichts in der Richtung?
P.S.
Was meinst du mit: Datentyp nicht vergessen? Macht er das nicht intern, der Value ist ja immer vom Typ Object, ich habe gedacht, dass er den dem Datenbanktyp am ähnlichsten Datentyp wählt?
Ach so, ich hatte angenommen, dass zwei '@' Zeichen eine Variable generieren, während ein '@' Zeichen, den Wert ausliest. Was passiert denn da genau, irgendwie verstehe ich die Synthax nicht so ganz...
Aber danke schon mal vielmals, das hat schon sehr geholfen FZelle und Noodless! 🙂 👍