Hallo,
ich habe einen Fehler mit dem TableAdapterManager:
oPostkriegDataSet_TableAdapterManager.UpdateAll(this.oPostkriegDataSet)
Diese Zeile führt zu diesem Laufzeit-Fehler:
Object reference not set to an instance of Object.Systems.Collections.ListDictionaryPostkrieg2
Wenn ich Debugge sehe ich, dass das Datenset definiert ist, allerdings beim Hovern mit der Maus über das TableAdapterManager-Objekt kriege ich "No overload for method UpdateAll takes 0 arguments". Das Datenset ist aber definiert und war für das Kompilieren auch das richtige Objekt (offensichtlich).
oPostkriegDataSet_TableAdapterManager = new Postkrieg2.DataSet_Postkrieg2_Direct_To_SQLDatabaseTableAdapters.TableAdapterManager();
Kann mir jemand sagen, wo ich ansetzen muss ?
Danke
Dieter
verwendetes Datenbanksystem: SQL Server 2008
Hallo,
ich versuche Images in eine SQL-Server-Tabelle zu speichern. Da Datentyp der entsprechenden Felder ist "Image".
Über WPF-Datenbindung sind die Felder an Controls gebunden
<Image Grid.Column="0" Grid.Row="0" Height="Auto" HorizontalAlignment="Left" Margin="3" Name="frontImage" Source="{Binding Path=Front}" Stretch="Fill" VerticalAlignment="Center" Width="Auto" />
Eine entsprechende Insert-Methode ist automatisch generiert worden, die byte[]-Werte für die zu speichernden Images erwartet. Da die Image-Objekte vom Typ System.Windoes.Controls.Image sind habe ich eine Konversion wie folgt vorgenommen:
public byte[] getJPGFromImageControl(BitmapImage imageC)
{
MemoryStream memStream = new MemoryStream();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(imageC));
encoder.Save(memStream);
MessageBox.Show(memStream.GetBuffer().Length.ToString());
return memStream.GetBuffer();
}
Folgender Aufruf
byte[] test = this.getJPGFromImageControl(frontImage.Source as BitmapImage);
MessageBox.Show(Convert.ToString(oPostkriegDataSet_Images_Adapter.Insert(test, test)));
erzeugt den Fehler:> Fehlermeldung:
Object Reference not set to an instance of an object.System.Collections.ListDictionaryInternalPostkrieg2
"test" ist im Moment der Übergabe ein Byte-Array mit Inhalt (der Array ist >500000), sprich die Konversion scheint geklappt zu haben ?
Weiß jemand Rat ?
Danke
dietbeck
verwendetes Datenbanksystem: <SQL Server>
Hallo,
ich habe folgenden Code:
oPostkriegDataSet = ((Postkrieg2.DataSet_Postkrieg2_Direct_To_SQLDatabase)(this.FindResource("dataSet_Postkrieg2_Direct_To_SQLDatabase")));
// Lädt Daten in Tabelle "Cover_Main_Table". Sie können diesen Code nach Bedarf ändern.
oPostkriegDataSetAdapter = new Postkrieg2.DataSet_Postkrieg2_Direct_To_SQLDatabaseTableAdapters.Cover_Main_TableTableAdapter();
oCover_Main_Table_View = ((System.Windows.Data.CollectionViewSource)(this.FindResource("cover_Main_TableViewSource")));
oPostkriegDataSetAdapter.Fill(oPostkriegDataSet.Cover_Main_Table);
oCover_Main_Table_Row = oPostkriegDataSet.Cover_Main_Table.NewCover_Main_TableRow();
//oPostkriegDataSet.Cover_Main_Table.AddCover_Main_TableRow(oCover_Main_Table_Row);
//oPostkriegDataSet.Cover_Main_Table.Rows.Add(oCover_Main_Table_Row);
//oCover_Main_Table_View.View.Refresh();
oCover_Main_Table_View.View.MoveCurrentToLast();
MessageBox.Show(oCover_Main_Table_View.View.CurrentPosition.ToString());
//oCover_Main_Table_Row.SetAdded();
Mit einem entsprechenden Update-Aufruf kann ich auch problemlos existierende Einträge in der Datenbanktabelle updaten.
oPostkriegDataSetAdapter.Update(oPostkriegDataSet.Cover_Main_Table)
Nun will ich aber einen neuen Eintrag erstellen und füllen und das kriege ich nicht hin. Die entsprechenden Columns der Datenbanktabelle sind an Kontrollen im Form gebunden. Aber das Erzeugen einer neuen typisierten Row geht zwar
(oPostkriegDataSet.Cover_Main_Table.NewCover_Main_TableRow();
und scheint auch einen neuen Eintrag in der Datatable des Datasets zu erzeugen, aber der Update geht nicht, sprich eine Eingabe in einer der gebundenen Kontrollen (die leer sind) führt eben zu keinem Update der Datenbanktabelle über die Update-Methode.
Danke für Hilfe
dietbeck
Hi,
Ich habe NewRow verwendet, wie vorgeschlagen, verstehe aber nicht warum ich den generieerten Typ "...TableRow" dann nicht ordentlich verwenden kann
Kann mir jemand sagen, wie ich einen neuen Record auch tatsächlich in meine Datenbanktabelle kriege, ich bin neu in WPF, hoffe ich frage icht zu blöd.
MessageBox.Show(textBoxComment.Text);
Postkrieg2.Postkrieg2DataSet1 postkrieg2DataSet1 = ((Postkrieg2.Postkrieg2DataSet1)(this.FindResource("postkrieg2DataSet1")));
Postkrieg2DataSet1.Cover_Main_TableDataTable oDataTable = new Postkrieg2DataSet1.Cover_Main_TableDataTable();
// Lädt Daten in Tabelle "Cover_Main_Table". Sie können diesen Code nach Bedarf ändern.
Postkrieg2.Postkrieg2DataSet1TableAdapters.Cover_Main_TableTableAdapter postkrieg2DataSet1Cover_Main_TableTableAdapter = new Postkrieg2.Postkrieg2DataSet1TableAdapters.Cover_Main_TableTableAdapter();
postkrieg2DataSet1Cover_Main_TableTableAdapter.Fill(postkrieg2DataSet1.Cover_Main_Table);
//System.Windows.Data.CollectionViewSource cover_Main_TableViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("cover_Main_TableViewSource")));
//cover_Main_TableViewSource.View.MoveCurrentToFirst();
DataRow oNewRow = oDataTable.NewRow();
oNewRow[1] = textBoxComment.Text;
oNewRow[2] = "FALSE";
MessageBox.Show(oNewRow[1].ToString());
//Postkrieg2DataSet1TableAdapters.Cover_Main_TableTableAdapter adapter = new Postkrieg2DataSet1TableAdapters.Cover_Main_TableTableAdapter();
postkrieg2DataSet1Cover_Main_TableTableAdapter.Update(oDataTable);
MessageBox.Show(oDataTable.Rows.Count.ToString());
Mit dem Code oben, der größtenteils über den Designer im Event Window_Load generiert wurde, mit den Objektvariablen überwiegned lokal, habe ich nun in ein ButtonClick event überführt.
Von der ersten zur zweiten MessgeBox verschwindet der Wert meines textboxComment.Text und wird "null" bzw der Inhalt der oNewRow[1] ist null. Mit dem Update passiert gar nichts, sprich es wird weder eine Row in der oDataTable generiert noch in der gebundenen Datenbanktabelle.
Wie gesagt, mir geht es drum dies erstmal hinzukriegen.
Danke
dietbeck
Hallo
ich komme bei der folgenden Fehlermeldung nicht weiter:
'System.Data.DataRow' does not contain a constructor that takes 0 arguments
Diese Zeile verursahct den Fehler:
Postkrieg2DataSet1.Cover_Main_TableRow oNewRow = new Postkrieg2DataSet1.Cover_Main_TableRow();
im folgenden automatisch generierten Designer-Code:
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
internal Cover_Main_TableRow(global::System.Data.DataRowBuilder rb) :
base(rb) {
this.tableCover_Main_Table = ((Cover_Main_TableDataTable)(this.Table));
}
public Cover_Main_TableRow()
{
// TODO: Complete member initialization
}
Vielen Dank für Hilfe
dietbeck
Hi,
habe den Code unten.
Nun wird das Abspielen der Sound-Datei immer weiter verzögert, je öfter ich innerhalb meiner Session die Sound-Datei abspiele. Sprich Das Abspielen setzt mit zunehmender Verzögerung ein. Wie kommt das und wie vermeide ich das ?
Danke
dietbeck
/// <summary>
/// Play Sound File
/// </summary>
/// <param name="sFileName"></param>
public void playSound(string sFileName)
{
try
{
// Add LoadCompleted event handler
player.LoadCompleted += new AsyncCompletedEventHandler(LoadCompleted);
// Set location of the .wav file
player.SoundLocation = sFileName;
// Load Asynchronously
player.LoadAsync();
}
catch (System.IO.FileNotFoundException e)
{
MessageBox.Show("Sound-Datei nicht gefunden" + "\r\n" + "\r\n" + e.ToString());
}
}
Hi,
wie kann ich zwei DateTime-Objekte voneinander subtrahieren und zwar nur bis zur Sekunde. Sprich der Sub-Sekunden-Berich soll nicht subtrahiert werden. Also "3-2" Sekunden und nicht 3.99483-2.71227.
Danke
dietbeck
Hallo,
folgender Cpde löscht eine Tabellenzeile im entsprechenden DataGrid, aber nicht die koreepondierende Zeile in der Datenbanktabelle. Wenn ich das richtig recherchiert habe sollte das eigentlich funktionieren ?
Danke
dietbeck
DataRowView drv = (DataRowView)_datagrid.CurrentItem;
drv.Delete();
drv.DataView.Table.AcceptChanges();
adapter.Update(ds.TestTabelle);
Hallo,
ich habe dieselbe Code-Logik und genau dasselbe Problem. Hat jemand eine Problemlösung ?
Danke
dietbeck
Trotz Code-Beispielen kriege ich immer wieder Fehler. Kann mir jemand sagen,wie ich das zum Laufen kriege.
Danke
dietbeck
xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="MainWindow" Height="350" Width="525" Closing="Window_Closing">
<Grid>
<dg:DataGrid x:Name="_dataGrid" Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="200" />
</Grid>
_datagrid.ItemsSource = ds.Tables[0].DefaultView;
Der Name "_datagrid" ist im aktuellen Kontext nicht vorhanden.
Hallo,
ich möchte den Zellinhalt einer einspaltigen Tabelle im Rahmen eines RoeEditEnding event auslesen. Habe folgendes
private List<string> getLookupTableCellContent(DataGrid dataGridTable, DataGridRowEditEndingEventArgs e, int numberOfColumns)
{
List<string> rowContent = new List<string>();
try
{
//go through the cells of the row and collect the individual cell contens of the row
for (int i = 0; i < numberOfColumns; i++)
{
FrameworkElement dataGridCell = dataGridTable.Columns[i].GetCellContent(e.Row);
if (dataGridCell.GetType() == typeof(TextBlock))
{
rowContent.Add(((TextBlock)dataGridCell).Text);
MessageBox.Show(((TextBlock)dataGridCell).Text);
}
}
}
Problem ist dass der Textblock leer ist, obwohl ich in der Tabellenzeile was eingetragen habe. Wie gesagt einspaltige Tabelle. Wenn ich das ganze mit einem CellEndEditing event und einer entsprechenden TextBox verarbeite, dann geht's. Ich will das aber flexibel für eine Zeile mit einer oder mehreren Spalten gestalten.
Danke für Hilfe
Dieter
Sorry, kann ich den Beitrag irgendwie nach WPF schieben ?
Das Konstrukt ist notwendig, um bei einem Refresh auch wieder den Tabelleninhalt angezeigt zu bekommen.
Dieter
Hallo,
ich gebe in die zweite Tabelle ("Stadt") in der leeren Zelle einen Wert ("Test1" ein.
siehe Anhang erstes Bild.
der Wert "verschwindet", wenn ich die Zelle verlasse, landet aber (wie beabsichtigt) in der db.
Wenn ich dann auf ein anderes Tab wechsle und wieder zurückkomme, steht meine Tabelle "Stadt" im Bereich der Tabelle "Land", der neue Wert "Test1" ist in der Tabelle "Land" gelandet.
Siehe Anhang zweites Bild
Danke
Dieter
Hier der relevante Code
/Tab Lookups chosen
if (tabControlPostkrieg.SelectedIndex == 3)
{
foreach (string sTable in lookupsTables) // Loop through lookup tables
{
string sColumn = sTable;
string sColumnAlias = sTable;
//show the content of the individual lookup tables
if (sTable == "Name")
{
//this gets first name and surname
adapter = handleDBConnection.selectTwoColumnOnSingleTable(sColumn, "Vorname", sColumn, "Vorname", sTable);
}
else
{
adapter = handleDBConnection.selectOneColumnOnSingleTable(sColumn, sColumnAlias, sTable);
}
adapter.Fill(datasetTable);
//only to get the content of the DataSet for debugging
//MessageBox.Show(datasetTable.GetXml());
switch (sTable)
{
case "Land":
//only works when the AutoGenerateColumns attribute is set to true
//the Copy() is required to have the content of the dataset preserved. Otherwise the Reset()
//below will delete the dataset content entirely and thus tables would be empty
this.dataGridLand.ItemsSource = datasetTable.Copy().Tables[0].DefaultView;
break;
case "Stadt":
this.dataGridStadt.ItemsSource = datasetTable.Copy().Tables[0].DefaultView;
break;
case "Herkunft":
this.dataGridHerkunft.ItemsSource = datasetTable.Copy().Tables[0].DefaultView;
break;
case "Waehrung":
this.dataGridWaehrung.ItemsSource = datasetTable.Copy().Tables[0].DefaultView;
break;
case "Name":
this.dataGridName.ItemsSource = datasetTable.Copy().Tables[0].DefaultView;
break;
}
//completely resets the Dataset, thus removes all tables entirely
datasetTable.Reset();
}
Hallo,
es sieht wie im Anhang aus. Ziel ist alle fünf Grids mit derselben Ausdehnung zu haben, wenn maximiert wurde (wie erreiche ich in diesem ZUsammenhang, dass die Spalten gescrollt werden können, da noch sehr viel mehr Einträge kommen werden.
Danke
dietbeck
[xml]<Grid DataContext="{Binding}" Width="Auto" Height="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<DataGrid AutoGenerateColumns="True" Height="Auto" HorizontalAlignment="Stretch" Name="dataGridLand" VerticalAlignment="Stretch" ItemsSource="{Binding ElementName=dataGridLand}" SelectionChanged="dataGridLand_SelectionChanged" DataContext="{Binding}" IsEnabled="True" GotFocus="dataGridLand_GotFocus" CanUserAddRows="True" SelectionMode="Single" SelectionUnit="Cell" ColumnWidth="*" Margin="-3,0,453,-1" Width="Auto"> </DataGrid>
<DataGrid AutoGenerateColumns="True" Height="Auto" HorizontalAlignment="Stretch" ItemsSource="{Binding ElementName=dataGridStadt}" Name="dataGridStadt" VerticalAlignment="Stretch" ColumnWidth="*" Margin="106,0,334,-7" Width="Auto" />
<Button Content="Insert Land" Height="23" HorizontalAlignment="Left" Margin="6,282,0,0" Name="buttonInsertLand" VerticalAlignment="Top" Width="104" Click="buttonInsertLand_Click" Grid.ColumnSpan="2" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="6,253,0,0" Name="textBoxLand" VerticalAlignment="Top" Width="104" Grid.ColumnSpan="2" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="203,250,0,0" Name="textBoxStadt" VerticalAlignment="Top" Width="101" />
<Button Content="Insert Stadt" Height="23" HorizontalAlignment="Left" Margin="203,282,0,0" Name="buttonInsertStadt" VerticalAlignment="Top" Width="101" />
<DataGrid AutoGenerateColumns="True" Height="Auto" HorizontalAlignment="Stretch" ItemsSource="{Binding}" Name="dataGridName" Margin="225,0,226,-5" ColumnWidth="Auto" Width="Auto" />
<DataGrid AutoGenerateColumns="True" Height="Auto" HorizontalAlignment="Stretch" ItemsSource="{Binding}" Name="dataGridHerkunft" VerticalAlignment="Stretch" Margin="436,-1,25,-3" ColumnWidth="Auto" Width="Auto" />
<DataGrid AutoGenerateColumns="True" Height="Auto" HorizontalAlignment="Stretch" ItemsSource="{Binding}" Name="dataGridWaehrung" VerticalAlignment="Stretch" Margin="335,0,125,-5" SelectionChanged="dataGridWaehrung_SelectionChanged" ColumnWidth="Auto" Width="Auto" />[/xml]
Hallo,
wie schaffe ich es, dass ein DataGrid mit dem Form mitskaliert ? Sprich wenn ich das Form maximiere, dann sollen sich auch die anderen darin enthaltenen Objekte proprotional mitvergrössern. Welche XAML-Eingenschaften steuern dies und wie ?
Vielen Dank für die Hilfe an einen XAML-Novizen.
dietbeck
Hallo,
wie kann ich eine Änderung in einem DataGrid in die Datenbank schreiben ?
Ich habe folgendes versucht
private void dataGridLand_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
adapter.Update(dataset);
}
Ich kann die Zelle ändern, aber die Änderung wird nicht in die Daten bank rückgeschrieben. Der Code wird aber ausgeführt, "ohne" Ergebnis.
adapter ist ein SqlDataAdapter-Objekt, dataset ein DataSet-Objekt
Wäre dankbar für entsprechende Hinweise
Danke
dietbeck
Hi,
kann mir jemand sagen, wie ich so etwas auslese:
<Answers>
<Answer>Eins</Answer>
<Answer>Zwei</Answer>
</Answers>
bsiher habe ich es mit var...select new... noch nicht geschafft, die beiden <Answer> tags separat auszulesen und beide Werte in der IEnumerable zu erhalten bzw. verarbeiten zu können.
Danke für Hilfe
dietbeck
Ok, alles klar. Danke für Eure Antworten, jetzt gehts.
Hi,
Ich habe eine Abfrage für eine XML-Datei, die entsprechende Tags durchläuft. Nun kommt aber nicht jeder Tag immer vor also zB
<Command>
<Name>Rundes Format</Name>
<Format>Rund</Format>
</Command>
<Command>
<Name>Kein Format</Name>
</Command>
Im zweiten Fall fehlt <Format> und ich kriege eine NullException mit folgendem, wie kann ich verhindern, dass der Code in diese Exception reinläuft, fehlende Tags, die keinen Wert haben, sind sicher eine häufige Erscheinung:
var commands = from command in xmlDoc.Descendants("Command")
select new
{
Name = command.Element("Name").Value,
Format = command.Element("Format").Value
};
Danke
dietbeck
Hi,
ist es möglich mit Linq to XML die <!--...--> XML-Kommentare auszulesen ?
Danke
dietbeck
LINQ to Xml 🙂
Was bequemeres gibts in meinen Augen zur Zeit nicht.
Jawoll, prima. 👍
@kleines_eichhörnchen
Danke für die Antwort. Kannst Du mir oder jemand anders bessere Komponenten für xml nennen, auch für FTP wäre prima.
Danke
Dietbeck
Hallo,
ich wollte mir ein GUI zume Auslesen und editieren einer xml-Datei schreiben. Dazu habe ich einen xml-Parser "Chilkat" gefunden, der ein recht gutes API hat. Den wollte ich jetzt verwenden und direkt in mein Form einbinden. Ich kriege aber die untenstehende Message, sobald ich ein Objekt des Parsers referenziere. Wie kriege ich das hin, dass ich dies im FOrm verwenden kann ?
Danke
dietbeck
DLL 'C:\Documents and Settings...\ChilkatDotNet.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
Hallo,
nein, ich nutze die System.Windows.Forms.Textbox. Ich bin relativ neu in der Welt von C#, bzw. programmiere nur gelegentlich. Ich will einfach Textboxen dynamisch in mein TableLayoutPanel einbauen und diese entsprechend ausrichten. Dazu wollte ich die Margins anpassen. Das Problem ist, dass ich ControlCollection im späteren Verlauf nutze und dies die Control.TextBox nicht aufnimmt.
Also bleibe ich, wenn möglich bei meiner Forms.TextBox, aber wie setze ich die Margins ohne Thickness ?
Danke
Dietbeck
Hallo,
ok, dass mit der Height und Width klappt nun, habe aber gleich follow-up-Probleme, da mein Code auf einer System.Windows.Forms.TextBox und nicht auf einer System.Windows.Controls.TextBox basiert
Daher die Frage,
wie kann ich die Margins dieser System.Windows.Forms.TextBox setzen, OHNE Thickness verwenden zu müssen (da ich dann wieder bei dem Problem lande, dass die textBox.Margin vom Typ Padding ist und nicht vom Typ Thickness)
Danke
dietbeck
Hallo, danke, ja der Verweis hat gefehlt.
Nun versuche ich folgendes:
textBox.Margin = new Thickness(3)
erhalte aber den Fehler, dass Konvertierung von Thickness nach Padding nicht möglich ist.
Meine TextBox ist vom Typ System.Windows.Forms.TextBox, ich brauche die Name-, Size-Eigenschaften, die aber bei System.Windows.Control.TextBox nicht vorhanden sind.
Hallo,
Obwohl ich den System.Windows-Namespace eingebunden habe steht Thickness nicht zur Verfügung. Woran kann das liegen ?
Danke
dietbeck
Hallo,
ich habe ein TableLayoutPanel und die Zellen entsprechend pro Reihe und Spalte prozentual skaliert. Nun möchte ich abhängig von der Grösse einer Zelle eine Control darin positionieren, und die Grösse der Control eben in Abhängigkeit der Grösse der Zelle skalieren. Ich kann nicht sehen, wie ich das erreichen kann, bzw. wie ich an die "Size" der Zelle herankomme.
Daran gleich anschliessend, kann ich in eine Zelle 2 Controls positionieren und gleichzeitig nutzen ? Auch hier müsste ich dann entsprechend skalieren und eine von rechts, die andere von links einsetzen.
Kann mir jemand helfen.
Danke
dietbeck
Würde das funktionieren und eine neue Connection für jeden File-Load verhindern ?
foreach (String filePathName in ArrayList)
{
ftpUpload.ftpUploadConnect(ftpAddress + "eb/" + Utility.getDate() + filePathName, "", "");
ftpUploadRequest.KeepAlive = true;
}
ftpUploadRequest.Abort();
Hallo,
mir ist nicht ganz klar, ob ich mit der FTPWebRequest-Klasse auch in der Lage bin multiple Dateien pro Verbindung hochzuladen. Das untere wollte ich vermeiden, da dann ja pro Datei jedesmal eine Verbindung aufgemacht und wieder geschlossen wird.
Für Hinweise dankt
dietbeck
foreach (String filePathName in ArrayList)
{
ftpUpload.ftpUploadConnect(ftpAddress + "eb/" + Utility.getDate() + filePathName, "", "");
ftpUploadRequest.Abort();
}
Alles klar, danke. Einen auomatischen Refresh gibt es also nicht ?!
Hallo,
eigentlich wird die Zentrierungszeile immer erreicht, sobald eine PictureBox gefunden wird, dh. erstmal egal ob Bild oder nicht, die Zentrierung wird gemacht. Ich hab die Codezeile aber auch im inneren if-Statement gehabt, selbes Problem, immer nur das erste Bild wird zentriert.
Hallo,
ich habe eine Codesequenz, die Images in PictureBoxen um 90 Grad dreht. Der Code geht auch ohne Fehler, nur werden die Bilder erst dann gedreht sichtbar, wenn ich vom Form wegklicke auf ein anderes offenes Programm und dann wieder zurückgehe. Erst wenn der Fokus dann wieder auf meinem Form ist, sind die Bilder gedreht (VS2008). Ist das ein Bug ?
Hi,
kann mir jemand sagen, warum nur das Bild in der ersten PictureBox zentriert wird, nicht aber die Bilder in den anderen PictureBoxen (VS2008)?
Danke
dietbeck
foreach (Control ctl in tableLayoutPanel1.Controls)
{
if (ctl is PictureBox)
{
pB = (PictureBox)ctl;
pB.SizeMode = PictureBoxSizeMode.CenterImage; // hier
parentControl = (TableLayoutPanel)pB.Parent;
cB = (CheckBox)parentControl.GetControlFromPosition (parentControl.GetColumn(pB), parentControl.GetRow(pB) + 1);
index = Convert.ToInt16(ctl.Name.Substring (ctl.Name.LastIndexOf('x') + 1));
if (index <= theThumbnails.Count)
{
oneImage = (Image)theThumbnails[index - 1];
//(System.Drawing.Bitmap)Image.FromFile (theThumbnails [index-1].ToString());
pB.Image = oneImage;
cB.Checked = true;
}
}
}
Hallo Michelbeck,
der Ansatz hiflt mir schonmal sicher weiter. Tatsächlich soll jede PictureBox ein anderes Image erhalten. Problemlos wäre der Ansatz dann, wenn die PictureBox-Controls im foreach auch tatsächlich in der Reihenfolge durchlaufen werden, wie Sie erzeugt wurden. Dann ist die Zuordnung der Bilder aus einer ArrayList ok. Wenn die PictureBox-Controls aber "random" durchlaufen werden, dann ist es ein Problem. Es soll in jedem Fall so sein, dass pictureBox1 zuerst, danach pictureBix2 etc. gefüllt werden soll. Und nicht pictureBix10, dann pictureBox4, dann pictureBox20.
Obwohl ich denke gerade, dass ich das dann über das Parsen der Name Property der pictureBox lösen können müsste, indem ich die entsprechende Zahl am Ende isoliere und dieser dann das entsprechende Bild der ArrayList zuordne. Es sollen nur soviele PictureBox-Controls gefüllt werden, wie Bilder in der ArrayList sind, und eben immer "von vorne", also beginnedn mit pictureBox1.
Gruss
dietbeck
Hallo,
wäre schön wenn mir jemand helfen könnte.
Ich habe eine Reihe von pictureBox-Objekten in meinem Form, genannt pictureBox1, pictureBox2, pictureBox3...
Ich möchte diesen mit einem while-, foreach- oder anderem Loop Images zuordnen. Ich hatte gedacht die Zahl im Namen der pictureBoxen zu benutzen. Ich habs aber bisher noch nicht hingekriegt, die Zahl entsprechend zu isolieren und für den Loop zu benutzen um dann die einzelnen pictureBoxen anzusteuern, da ich so ja mit einem String arbeiten muss, mit dem ich im Endeffekt kein pictureBox.Image Objekt erstellen kann.
dietbeck
Hallo herbivore,
ja, danke. Ich schaue mir den Code an. Im Moment habe ich den Bedarf nicht, da von "unten nach oben" für mich allein auch ok ist. Und das funktioniert so wie es soll. Aber vielleicht brauche ich es eben doch nochmal anderweitig.
Jedenfalls danke für die Hilfe
Dieter
@BennyP
Nein, Array.Sort sortiert mir eben nicht wie gewünscht. Ich habe nach wie vor ...3212... vor ...2198...
Hallo,
ja funktioniert. Warum aber funktioniert es anders herum (von "oben" nach "unten"), wie man es erwarten würde) nicht ? Für mein Programm, dass nur ich benutze, kann ich damit leben, von "unten" nach "oben" zu markieren.
Danke
Dieter
Hallo,
es ist so dass ich innerhalb des Arrays dann
cims3212.jpg
cims2198.jpg
sortiert kriegen muss, so dass "...3212" NACH "....2198" kommen muss. Array.Sort nehme ich an erkennt die Zahlen nicht als solche und sortiert daher nicht danach.
Wie müsste ich also vorgehen, muss ich den String "zerlegen" und dann irgendwie sortieren ?
Hallo,
wenn ich OpenFileDialog auf Multiselect setze und mehrere Dateien auswähle, dann finde ich beim enumerieren, dass der letzte File beim Durchlaufen von OpenFileDialog.FileNames an erster Stelle kommt, während alle anderen Files danach in der richtigen Reihenfolge im String-Array abgelegt sind.
Wie kommt das und was muss ich tun um den ersten File auch an erster Stelle zu haben ?
Danke
Dieter
Hallo,
wie gehe ich am besten vor um einen "A generic error occured in GDI+" zu diagnostizieren ?
Danke
dietbeck
Hallo,
danke für die Hinweise. Es lag in der Tat am fehlenden zweiten Parameter, ImageFormat.JPeg, so dass das Bild im png-Format gespeichert wurde, trotz .jpg-Endung
Hallo,
mache ein
theImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
Klappt auch, aber wenn ich das Bild dann rotiert abspeichere, ist der File 10x grösser als der ursprüngliche File, obwohl die Pixelgrössen unverändert sind (ausser natürlich, dass diese nun umgekehrt sind). Aber natürlich soll(te) die Speichergrösse gleich bleiben. Wie kommt das zustance, und was kann ich tun um das zu verhindern.
Danke
dietbeck
Hallo,
wie gehe ich vor, wenn ich zwei oder mehr jpg-Bilder aneinanderhängen will, so dass ein neuer jpg-file entsteht, der die Bilder unter- oder nebeneinander enthält.
Danke
dietbeck
Ich habe eine kleine Forms-basierte C#-Anwendung, die einen Oracle-Login realisiert. Ich will dies nun in anderen Anwendungen nutzen. dll geht nicht und als exe kann ich es nicht einbinden. Gibt es eine Moeglichkeit diese Anwendung innerhalb einer anderen Anwendung einzubinden ?
Hallo,
wie schaffe ich es, dass bei einem Form keine der Textboxen den Cursor-Focus beim Startup bekommt, sondern ich selbst bestimmen moechte, in welche Textbox ich zuerst schreiben will.
Danke
Dieter