PDA

View Full Version : [C#] Gestire 4 checkbox


mcardini
19-04-2009, 14:33
Ciao a tutti,
Sto creando, a scopo didattico, una piccola applicazione che mi fa partire le utility di sistema di windows senza ricorrere alla riga di comando.
Ora volendo implementare il defrag, ho creato 4 checkbox dove dovrei selezionare gli argomenti da passare al comando defrag.exe.
Ora, il problema e' che i checkbox posso essere selezionati coem uno preferisce (esempio verbose -v e full defrag -w) solo che non so come gestirli.
Come faccio ad assegnare ad ogni check un valore da passare poi alla riga di comando?
Io per ora sto procedendo a colpi di 'if' ma la soluzione non e' buona, infatti fa' un po quello che gli pare :D
Vi posto il codice che per ora ho sviluppato.

// Defrag system
private void button2_Click(object sender, EventArgs e)
{

const string arg = "-a ";
const string drive = "c: ";
const string boot = "-b ";
const string verb = "-v ";
const string allvol = "-c ";
const string full = "-w ";
string command = "";
if (checkBox1.Checked)
{
command = (command + boot);
}
if (checkBox2.Checked)
{
command = (command + verb + arg);
}
if (checkBox3.Checked)
{
command = (command + allvol);
}
if (checkBox4.Checked)
{
command = (command + full);
}
Process.Start("defrag.exe ", command + drive);
}

alex783
19-04-2009, 15:43
Ciao!
Premesso che anch'io sono alle prime armi (anzi, primissime :stordita: ) con C# e .NET, farei così:

- utilizzo il controllo CheckedListBox al posto dei CheckBox;
- utilizzo un comboBox;
- creo un array rettangolare di tipo string dove metto tutti i comandi relativi al defrag;
- creo un campo Command di tipo string (è quello da passare come argomento al metodo Start della classe Process);


Ecco il codice:

public partial class Form1 : Form
{
static string Command;
static string[] drives = Environment.GetLogicalDrives();
static string[,] CommandArray = new string[3, 2] // [riga, colonna] aumenta la dimensione Riga se vuoi aggiungere altri comandi possibili
{
{"-v","Verbose Mode"},
{"-w","Full Defrag Mode"},
{"-b","Other command"}
};

public Form1()
{
InitializeComponent();
comboBox1.Items.AddRange(drives);
for (int i = 0; i < CommandArray.GetLength(0); i++)
checkedListBox1.Items.Add(CommandArray[i, 1]);
}

private void button1_Click(object sender, EventArgs e)
{
Command= string.Empty;
if (comboBox1.text!=string.Empty)
{
for (int i = 0; i < CommandArray.GetLength(0); i++)
{
if (checkedListBox1.CheckedItems.Contains(CommandArray[i, 1]))
Command = Command + " " + CommandArray[i, 0];
}
Process.Start("defrag.exe ", command + " " + comboBox1.Text);
}
else MessageBox.Show("Devi selezionare un drive da deframmentare.");
}
}

P.S: non dimenticarti di impostare a true la proprietà "CheckOnClick" al CheckedListBox. ;)

mcardini
19-04-2009, 16:33
Grazie per il suggerimento, provo subito.

Edit: Ho provato e funge alla grande!
Grazie ancora

alex783
19-04-2009, 17:23
Prego :)