Transfert de mp3 vers lecteur.

Description

Ce programme écrit en Csharp 2.0 sous Visual Studio 2005 permet de transférer des fichiers MP3 de vos disques vers le lecteur MP3 en supprimant les fichiers existants sur le lecteur, de façon automatique (au hasard) ou manuel.

Il y a quelques fonctions sympathiques dans ce programme notamment :

Une classe trouvée sur internet (BindingListSort) de gestion des Listes triables directement dans un datagridview.

La création simple d'une ProgressBar style XP dans le DatagridView.

// Ne pas oublier le VirtualMode pour gérer l'affichage de la ProgressBar
this.dataGridView.VirtualMode = true;
this.dataGridView.CellValueNeeded += new DataGridViewCellValueEventHandler(dataGridView_CellValueNeeded);

void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
DataGridView grid = (DataGridView)sender;
if (grid.Columns[e.ColumnIndex].Name == "Avancement")
{
int percent = ((Mp3)grid.Rows[e.RowIndex].DataBoundItem).Avancement;

Size size = grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Size;
Bitmap image = new Bitmap(size.Width, size.Height);
Rectangle rectAvancement = new Rectangle(0, 0, size.Width, size.Height);
ProgressCell.Value = percent;
ProgressCell.Height = size.Height - 5;
ProgressCell.Width = size.Width - 5;
ProgressCell.DrawToBitmap(image, rectAvancement);
e.Value = image;
}
}

// Pour info n'oublier le click droit Refactor -> Encapsuled field pour la création simplifié
ProgressBar _ProgressCell;
public ProgressBar ProgressCell
{
get
{
if (_ProgressCell == null)
{
_ProgressCell = new ProgressBar();
// Obligatoire pour créer le handle d'affichage sans affectation à un control
_ProgressCell.CreateControl();
_ProgressCell.Style = ProgressBarStyle.Blocks;
}
return _ProgressCell;
}

}

La gestion des BackgroundWorker bien que j'en soit revenu, c'est vrai que le cette classe facilite la gestion des thread en tache de fond mais cette utilisation en quand même limité, il n'est pas possible par exemple de lancer un BackgroundWorker dans un BackgroundWorker. Je préfère maintenant utilise l'invoke pour l'affichage dans un thread séparé par exemple :

private delegate void AddNodeDelagateDef(TreeNode pNodeParent, TreeNode pNodeEnfant);
private AddNodeDelagateDef AddNodeDelagate = new AddNodeDelagateDef(AddNode);

if (pNode.TreeView.InvokeRequired)
pNode.TreeView.Invoke(AddNodeDelagate, new TreeNode[] { pNode, nodeRep });
else
AddNode(pNode, nodeRep);

private void AddNode(TreeNode pNodeParent, TreeNode pNodeEnfant)
{
pNodeParent.Nodes.Add(pNodeEnfant);
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.