Hallo Leute,
ich möchte gerne alle Dateien in einem Ordner drucken. Das ganze soll noch selektierbar sein in einem CheckedlistView.
Bin nun soweit dass man die Reihenfolge im Listview auch verändern kann...
Leider werden die Dokumente nicht nach der Reihenfolge gedruckt wie sie im Listview sind.
Beispiel:
Hab einen Ordner der 3 Dateien enthält:
test1.txt
test2.txt
test3.txt
wenn ich nun die Reihenfolge änder in:
test3.txt
test2.txt
test1.txt
wird gedruckt:
test2.txt
test1.txt
test3.txt
(Auch wenn die Reihenfolge nicht geändert wird, werden die Dateien nicht alphanumerisch gedruckt).
Ich habe auch den Index überprüft das müsste gehen, leider weiß ich nicht wie das foreach das Steuerelement abarbeitet.
Danke schon mal!
Anbei die Codeteile:
Einlesen der Dateien in ListView:
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
checkedListBox1.Items.Clear();
txtPath.Text = folderBrowserDialog1.SelectedPath;
string[] slFiles = Directory.GetFiles(txtPath.Text);
foreach (string sFile in slFiles)
{
checkedListBox1.Items.Add(sFile);
}
}
Verändern der Reihenfolge (Item Up)
int i = this.checkedListBox1.SelectedIndex;
bool b = false;
object o = this.checkedListBox1.SelectedItem;
if (i > 0)
{
if (checkedListBox1.GetItemCheckState(i) == CheckState.Checked)
{
b = true;
}
this.checkedListBox1.Items.RemoveAt(i);
this.checkedListBox1.Items.Insert(i - 1, o);
this.checkedListBox1.SelectedIndex = i - 1;
if (b == true)
{
checkedListBox1.SetItemCheckState(i-1, CheckState.Checked);
}
}
Verändern der Reihenfolge (Item Down)
int i = this.checkedListBox1.SelectedIndex;
bool b = false;
object o = this.checkedListBox1.SelectedItem;
if (i < this.checkedListBox1.Items.Count - 1)
{
if (checkedListBox1.GetItemCheckState(i) == CheckState.Checked)
{
b = true;
}
this.checkedListBox1.Items.RemoveAt(i);
this.checkedListBox1.Items.Insert(i + 1, o);
this.checkedListBox1.SelectedIndex = i + 1;
if (b == true)
{
checkedListBox1.SetItemCheckState(i + 1, CheckState.Checked);
}
}
Druckfunktion:
private static void PrintFile(string fullPath)
{
FileInfo fileInfo = new FileInfo(fullPath);
if (!fileInfo.Exists)
{
throw new FileNotFoundException();
}
var printProcess = new Process();
printProcess.StartInfo.FileName = fullPath;
printProcess.StartInfo.UseShellExecute = true;
printProcess.StartInfo.Verb = "print";
printProcess.Start();
}
Alle markierten Dateien drucken:
foreach (string sPrintFile in this.checkedListBox1.CheckedItems)
{
PrintFile(sPrintFile);
}
Ich habe die Ehre mein Problem selber zu lösen:
Da die Datei noch geöffnet wird, verzögert sich das ganze so, dass die Druckaufträge durcheinandergeraten.
Darum habe ich eine Pause eingebaut (1sek war zu wenig --> 2sek)
foreach (string sPrintFile in this.checkedListBox1.CheckedItems)
{
PrintFile(sPrintFile);
System.Threading.Thread.Sleep(2000);
}