Laden...

[gelöst] Abarbeiten eines CheckedListView nach gegebener Reihenfolge (Drucken)

Erstellt von cyntonix vor 14 Jahren Letzter Beitrag vor 14 Jahren 664 Views
C
cyntonix Themenstarter:in
37 Beiträge seit 2009
vor 14 Jahren
[gelöst] Abarbeiten eines CheckedListView nach gegebener Reihenfolge (Drucken)

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);
            }
C
cyntonix Themenstarter:in
37 Beiträge seit 2009
vor 14 Jahren

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);
            }