Elysia Tools
Navigation mobile
C#
Fonctionnalités Bureau Windows - Exemples C#
Exemples complets de fonctionnalités bureau en C# pour plateforme Windows incluant boîtes de dialogue fichiers, boîtes de messages et intégration barre d'état système
Exemples
Entrées de cette collection
Opérations Boîtes de Dialogue Fichiers
Boîtes de dialogue ouvrir et enregistrer fichiers avec filtres et options personnalisées
Difficulté
3/10
Temps estimé
20 min
Étiquettes
csharp, dialog, file, windows, desktop
Prérequis
Windows Forms basics, File system operations
using System;
using System.IO;
using System.Windows.Forms;
using System.Text;
// Note: These examples require references to System.Windows.Forms
// Add reference: System.Windows.Forms.dll
// Or use Windows Forms or WPF applications for full functionality
class FileDialogExamples
{
// 1. Simple Open File Dialog
public static string ShowOpenFileDialog()
{
Console.WriteLine("=== Open File Dialog Example ===");
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// Configure dialog properties
openFileDialog.Title = "Select a file to open";
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
openFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
openFileDialog.Multiselect = false;
// Show dialog and process result
DialogResult result = openFileDialog.ShowDialog();
if (result == DialogResult.OK)
{
string selectedFile = openFileDialog.FileName;
Console.WriteLine($"Selected file: {selectedFile}");
Console.WriteLine($"File size: {new FileInfo(selectedFile).Length:N0} bytes");
return selectedFile;
}
else
{
Console.WriteLine("No file selected");
return null;
}
}
}
// 2. Save File Dialog
public static string ShowSaveFileDialog()
{
Console.WriteLine("=== Save File Dialog Example ===");
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
// Configure dialog properties
saveFileDialog.Title = "Save your file";
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
saveFileDialog.Filter = "Text Files (*.txt)|*.txt|CSV Files (*.csv)|*.csv|All Files (*.*)|*.*";
saveFileDialog.FilterIndex = 1;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.AddExtension = true;
saveFileDialog.DefaultExt = "txt";
saveFileDialog.FileName = $"document_{DateTime.Now:yyyyMMdd_HHmmss}.txt";
// Show dialog and process result
DialogResult result = saveFileDialog.ShowDialog();
if (result == DialogResult.OK)
{
string savePath = saveFileDialog.FileName;
Console.WriteLine($"File will be saved to: {savePath}");
// Create some sample content
string content = $"Sample document created on {DateTime.Now:yyyy-MM-dd HH:mm:ss}\n" +
$"This is a test file created by the Save File Dialog example.\n" +
$"You can modify this content as needed.";
try
{
File.WriteAllText(savePath, content);
Console.WriteLine("File saved successfully!");
return savePath;
}
catch (Exception ex)
{
Console.WriteLine($"Error saving file: {ex.Message}");
return null;
}
}
else
{
Console.WriteLine("Save operation cancelled");
return null;
}
}
}
// 3. Multi-select Open Dialog
public static string[] ShowMultiSelectDialog()
{
Console.WriteLine("=== Multi-select File Dialog Example ===");
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// Configure dialog for multiple file selection
openFileDialog.Title = "Select multiple files";
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
openFileDialog.Filter = "Text Files (*.txt)|*.txt|Image Files (*.jpg;*.png;*.gif)|*.jpg;*.png;*.gif|All Files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
openFileDialog.Multiselect = true;
DialogResult result = openFileDialog.ShowDialog();
if (result == DialogResult.OK)
{
string[] selectedFiles = openFileDialog.FileNames;
Console.WriteLine($"Selected {selectedFiles.Length} files:");
long totalSize = 0;
foreach (string file in selectedFiles)
{
FileInfo fileInfo = new FileInfo(file);
totalSize += fileInfo.Length;
Console.WriteLine($" - {fileInfo.Name} ({FormatFileSize(fileInfo.Length)})");
}
Console.WriteLine($"Total size: {FormatFileSize(totalSize)}");
return selectedFiles;
}
else
{
Console.WriteLine("No files selected");
return new string[0];
}
}
}
// 4. Folder Browser Dialog
public static string ShowFolderBrowserDialog()
{
Console.WriteLine("=== Folder Browser Dialog Example ===");
using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
{
// Configure dialog properties
folderBrowserDialog.Description = "Select a folder for file operations";
folderBrowserDialog.ShowNewFolderButton = true;
folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer;
DialogResult result = folderBrowserDialog.ShowDialog();
if (result == DialogResult.OK)
{
string selectedFolder = folderBrowserDialog.SelectedPath;
Console.WriteLine($"Selected folder: {selectedFolder}");
// Get folder information
DirectoryInfo dirInfo = new DirectoryInfo(selectedFolder);
var files = dirInfo.GetFiles();
var directories = dirInfo.GetDirectories();
Console.WriteLine($"Folder contents:");
Console.WriteLine($" Files: {files.Length}");
Console.WriteLine($" Subdirectories: {directories.Length}");
if (files.Length > 0)
{
Console.WriteLine("Sample files:");
foreach (var file in files.Take(5))
{
Console.WriteLine($" - {file.Name} ({FormatFileSize(file.Length)})");
}
}
return selectedFolder;
}
else
{
Console.WriteLine("No folder selected");
return null;
}
}
}
// 5. Custom File Dialog with Preview
public static string ShowCustomFileDialog()
{
Console.WriteLine("=== Custom File Dialog with Preview ===");
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// Configure dialog
openFileDialog.Title = "Select a text file for preview";
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
openFileDialog.Filter = "Text Files (*.txt;*.log;*.csv)|*.txt;*.log;*.csv|All Files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
// Custom event handler for file selection change
openFileDialog.FileOk += (sender, e) =>
{
string selectedFile = openFileDialog.FileName;
if (File.Exists(selectedFile) && IsTextFile(selectedFile))
{
try
{
// Read first few lines for preview
string[] lines = File.ReadAllLines(selectedFile);
Console.WriteLine($"\n--- Preview of {Path.GetFileName(selectedFile)} ---");
for (int i = 0; i < Math.Min(5, lines.Length); i++)
{
string line = lines[i].Length > 50 ? lines[i].Substring(0, 50) + "..." : lines[i];
Console.WriteLine($"Line {i + 1}: {line}");
}
if (lines.Length > 5)
{
Console.WriteLine($"... and {lines.Length - 5} more lines");
}
Console.WriteLine($"--- End Preview ---\n");
}
catch (Exception ex)
{
Console.WriteLine($"Could not preview file: {ex.Message}");
}
}
else
{
Console.WriteLine("Selected file is not a text file or cannot be read for preview");
}
};
DialogResult result = openFileDialog.ShowDialog();
if (result == DialogResult.OK)
{
string selectedFile = openFileDialog.FileName;
Console.WriteLine($"Final selection: {selectedFile}");
return selectedFile;
}
else
{
Console.WriteLine("No file selected");
return null;
}
}
}
// 6. File Dialog with Custom Filters
public static void ShowDialogWithCustomFilters()
{
Console.WriteLine("=== File Dialog with Custom Filters ===");
// Define custom filters
var filters = new[]
{
new { Name = "Documents", Extensions = "*.txt;*.doc;*.docx;*.pdf" },
new { Name = "Images", Extensions = "*.jpg;*.jpeg;*.png;*.gif;*.bmp" },
new { Name = "Code Files", Extensions = "*.cs;*.js;*.html;*.css;*.xml" },
new { Name = "Data Files", Extensions = "*.csv;*.json;*.xml;*.yaml" },
new { Name = "All Files", Extensions = "*.*" }
};
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// Build custom filter string
StringBuilder filterBuilder = new StringBuilder();
foreach (var filter in filters)
{
filterBuilder.Append($"{filter.Name}|{filter.Extensions}|");
}
// Remove trailing pipe
string filterString = filterBuilder.ToString().TrimEnd('|');
openFileDialog.Filter = filterString;
openFileDialog.FilterIndex = 1;
openFileDialog.Title = "Select a file with custom filters";
DialogResult result = openFileDialog.ShowDialog();
if (result == DialogResult.OK)
{
string selectedFile = openFileDialog.FileName;
string extension = Path.GetExtension(selectedFile).ToLower();
Console.WriteLine($"Selected file: {selectedFile}");
Console.WriteLine($"File extension: {extension}");
// Determine which filter was used
int selectedFilterIndex = openFileDialog.FilterIndex - 1;
if (selectedFilterIndex >= 0 && selectedFilterIndex < filters.Length)
{
var selectedFilter = filters[selectedFilterIndex];
Console.WriteLine($"Filter used: {selectedFilter.Name}");
}
}
else
{
Console.WriteLine("No file selected");
}
}
}
// 7. Batch File Processing Dialog
public static void BatchFileProcessing()
{
Console.WriteLine("=== Batch File Processing Dialog ===");
// Step 1: Select source folder
string sourceFolder = null;
using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
{
folderDialog.Description = "Select source folder containing files to process";
if (folderDialog.ShowDialog() == DialogResult.OK)
{
sourceFolder = folderDialog.SelectedPath;
Console.WriteLine($"Source folder: {sourceFolder}");
}
else
{
Console.WriteLine("No source folder selected");
return;
}
}
// Step 2: Select destination folder
string destinationFolder = null;
using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
{
folderDialog.Description = "Select destination folder for processed files";
if (folderDialog.ShowDialog() == DialogResult.OK)
{
destinationFolder = folderDialog.SelectedPath;
Console.WriteLine($"Destination folder: {destinationFolder}");
}
else
{
Console.WriteLine("No destination folder selected");
return;
}
}
// Step 3: Process files
if (!string.IsNullOrEmpty(sourceFolder) && !string.IsNullOrEmpty(destinationFolder))
{
try
{
var sourceFiles = Directory.GetFiles(sourceFolder, "*.txt");
Console.WriteLine($"Found {sourceFiles.Length} text files to process");
int processedCount = 0;
foreach (string sourceFile in sourceFiles)
{
string fileName = Path.GetFileName(sourceFile);
string destFile = Path.Combine(destinationFolder, $"processed_{fileName}");
// Simple processing: add timestamp to the beginning
string originalContent = File.ReadAllText(sourceFile);
string processedContent = $"Processed on {DateTime.Now:yyyy-MM-dd HH:mm:ss}\n\n{originalContent}";
File.WriteAllText(destFile, processedContent);
processedCount++;
Console.WriteLine($"Processed: {fileName}");
}
Console.WriteLine($"\nBatch processing completed! {processedCount} files processed.");
}
catch (Exception ex)
{
Console.WriteLine($"Error during batch processing: {ex.Message}");
}
}
}
// Helper methods
private static bool IsTextFile(string filePath)
{
string extension = Path.GetExtension(filePath).ToLower();
string[] textExtensions = { ".txt", ".log", ".csv", ".json", ".xml", ".html", ".css", ".js", ".cs", ".md" };
return textExtensions.Contains(extension);
}
private static string FormatFileSize(long bytes)
{
string[] sizes = { "B", "KB", "MB", "GB", "TB" };
int order = 0;
double size = bytes;
while (size >= 1024 && order < sizes.Length - 1)
{
order++;
size /= 1024;
}
return $"{size:F2} {sizes[order]}";
}
// Main method for demonstration
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("=== C# File Dialog Examples ===\n");
Console.WriteLine("Note: These examples require a Windows Forms application context.");
Console.WriteLine("Some examples may not work in console mode.\n");
try
{
// Enable visual styles for better dialog appearance
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Run examples
ShowOpenFileDialog();
Console.WriteLine();
ShowSaveFileDialog();
Console.WriteLine();
ShowMultiSelectDialog();
Console.WriteLine();
ShowFolderBrowserDialog();
Console.WriteLine();
ShowCustomFileDialog();
Console.WriteLine();
ShowDialogWithCustomFilters();
Console.WriteLine();
BatchFileProcessing();
Console.WriteLine("\nAll file dialog examples completed!");
}
catch (Exception ex)
{
Console.WriteLine($"Error running examples: {ex.Message}");
}
}
}Opérations Boîtes de Messages
Divers types de boîtes de messages avec différents boutons, icônes et comportements personnalisés
Difficulté
3/10
Temps estimé
15 min
Étiquettes
csharp, messagebox, dialog, windows, desktop
Prérequis
Windows Forms basics, Dialog handling
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading.Tasks;
// Note: These examples require references to System.Windows.Forms
// Add reference: System.Windows.Forms.dll
class MessageBoxExamples
{
// 1. Simple Information Message Box
public static void ShowInformationMessage()
{
Console.WriteLine("=== Information Message Box ===");
string message = "This is an information message.\n\n" +
"Information messages are used to provide important " +
"information to the user that they need to be aware of.";
string title = "Information";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.OK,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1
);
Console.WriteLine($"Message box result: {result}");
}
// 2. Warning Message Box
public static void ShowWarningMessage()
{
Console.WriteLine("=== Warning Message Box ===");
string message = "Warning: You are about to perform an action that cannot be undone.\n\n" +
"Please make sure you want to continue before proceeding.";
string title = "Warning";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2
);
Console.WriteLine($"Warning message result: {result}");
if (result == DialogResult.OK)
{
Console.WriteLine("User chose to proceed with the action");
}
else
{
Console.WriteLine("User cancelled the action");
}
}
// 3. Error Message Box
public static void ShowErrorMessage()
{
Console.WriteLine("=== Error Message Box ===");
string message = "An error has occurred while processing your request.\n\n" +
"Error details: The specified file could not be found.\n" +
"Please check the file path and try again.";
string title = "Error";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.OK,
MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1
);
Console.WriteLine($"Error message result: {result}");
}
// 4. Question Message Box with Yes/No
public static void ShowQuestionMessage()
{
Console.WriteLine("=== Question Message Box ===");
string message = "Do you want to save the changes before closing?\n\n" +
"Any unsaved changes will be lost if you don't save.";
string title = "Save Changes";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1
);
Console.WriteLine($"Question result: {result}");
switch (result)
{
case DialogResult.Yes:
Console.WriteLine("User chose to save changes");
break;
case DialogResult.No:
Console.WriteLine("User chose not to save changes");
break;
default:
Console.WriteLine("User closed the dialog without choosing");
break;
}
}
// 5. Yes/No/Cancel Message Box
public static void ShowYesNoCancelMessage()
{
Console.WriteLine("=== Yes/No/Cancel Message Box ===");
string message = "The document has been modified.\n\n" +
"Do you want to save the changes?";
string title = "Unsaved Changes";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1
);
Console.WriteLine($"Yes/No/Cancel result: {result}");
switch (result)
{
case DialogResult.Yes:
Console.WriteLine("User chose to save the document");
break;
case DialogResult.No:
Console.WriteLine("User chose not to save the document");
break;
case DialogResult.Cancel:
Console.WriteLine("User cancelled the operation");
break;
default:
Console.WriteLine("User closed the dialog");
break;
}
}
// 6. Retry/Cancel Message Box
public static void ShowRetryCancelMessage()
{
Console.WriteLine("=== Retry/Cancel Message Box ===");
string message = "Connection to the server failed.\n\n" +
"Would you like to try again?";
string title = "Connection Failed";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.RetryCancel,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1
);
Console.WriteLine($"Retry/Cancel result: {result}");
int attempts = 1;
while (result == DialogResult.Retry && attempts < 3)
{
Console.WriteLine($"Attempt {attempts + 1}: Retrying connection...");
attempts++;
// Simulate connection attempt
System.Threading.Thread.Sleep(1000);
// Show retry dialog again
result = MessageBox.Show(
$"Connection attempt {attempts} failed.\n\nWould you like to try again?\n(Attempt {attempts} of 3)",
"Connection Failed",
MessageBoxButtons.RetryCancel,
MessageBoxIcon.Exclamation
);
}
if (result == DialogResult.Cancel || attempts >= 3)
{
Console.WriteLine("User cancelled or max attempts reached");
}
}
// 7. Abort/Retry/Ignore Message Box
public static void ShowAbortRetryIgnoreMessage()
{
Console.WriteLine("=== Abort/Retry/Ignore Message Box ===");
string message = "A file access error occurred during processing.\n\n" +
"What would you like to do?";
string title = "File Access Error";
DialogResult result = MessageBox.Show(
message,
title,
MessageBoxButtons.AbortRetryIgnore,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2
);
Console.WriteLine($"Abort/Retry/Ignore result: {result}");
switch (result)
{
case DialogResult.Abort:
Console.WriteLine("User chose to abort the entire operation");
break;
case DialogResult.Retry:
Console.WriteLine("User chose to retry the file access");
break;
case DialogResult.Ignore:
Console.WriteLine("User chose to ignore this error and continue");
break;
default:
Console.WriteLine("User closed the dialog");
break;
}
}
// 8. Custom Message Box with Custom Buttons
public static DialogResult ShowCustomMessageBox(string title, string message, params string[] buttons)
{
Console.WriteLine("=== Custom Message Box ===");
// Create a custom dialog form
Form customDialog = new Form();
customDialog.Text = title;
customDialog.Size = new Size(400, 200);
customDialog.StartPosition = FormStartPosition.CenterScreen;
customDialog.FormBorderStyle = FormBorderStyle.FixedDialog;
customDialog.MaximizeBox = false;
customDialog.MinimizeBox = false;
// Add message label
Label messageLabel = new Label();
messageLabel.Text = message;
messageLabel.Location = new Point(20, 20);
messageLabel.Size = new Size(360, 80);
messageLabel.TextAlign = ContentAlignment.MiddleCenter;
customDialog.Controls.Add(messageLabel);
// Add buttons
int buttonWidth = 80;
int buttonHeight = 30;
int spacing = 10;
int totalButtonWidth = buttons.Length * buttonWidth + (buttons.Length - 1) * spacing;
int startX = (400 - totalButtonWidth) / 2;
int startY = 120;
DialogResult dialogResult = DialogResult.None;
for (int i = 0; i < buttons.Length; i++)
{
Button button = new Button();
button.Text = buttons[i];
button.Location = new Point(startX + i * (buttonWidth + spacing), startY);
button.Size = new Size(buttonWidth, buttonHeight);
int buttonIndex = i;
button.Click += (sender, e) =>
{
dialogResult = (DialogResult)(buttonIndex + 1); // Custom DialogResult values
customDialog.DialogResult = dialogResult;
customDialog.Close();
};
customDialog.Controls.Add(button);
}
// Show dialog
customDialog.ShowDialog();
Console.WriteLine($"Custom message box result: {dialogResult}");
return dialogResult;
}
// 9. Message Box with Timeout (custom implementation)
public static void ShowTimeoutMessageBox()
{
Console.WriteLine("=== Timeout Message Box ===");
// Create a form that auto-closes after timeout
Form timeoutForm = new Form();
timeoutForm.Text = "Auto-close Message";
timeoutForm.Size = new Size(350, 150);
timeoutForm.StartPosition = FormStartPosition.CenterScreen;
timeoutForm.FormBorderStyle = FormBorderStyle.FixedDialog;
timeoutForm.MaximizeBox = false;
timeoutForm.MinimizeBox = false;
timeoutForm.TopMost = true;
// Add message label
Label messageLabel = new Label();
messageLabel.Text = "This message will automatically close in 5 seconds.\n\n" +
"You can also click OK to close it immediately.";
messageLabel.Location = new Point(20, 20);
messageLabel.Size = new Size(310, 60);
timeoutForm.Controls.Add(messageLabel);
// Add OK button
Button okButton = new Button();
okButton.Text = "OK";
okButton.Location = new Point(140, 90);
okButton.Click += (sender, e) =>
{
timeoutForm.DialogResult = DialogResult.OK;
timeoutForm.Close();
};
timeoutForm.Controls.Add(okButton);
// Set up timer for auto-close
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 5000; // 5 seconds
timer.Tick += (sender, e) =>
{
timer.Stop();
timeoutForm.DialogResult = DialogResult.Cancel;
timeoutForm.Close();
};
timer.Start();
DialogResult result = timeoutForm.ShowDialog();
timer.Stop();
Console.WriteLine($"Timeout message box result: {result}");
}
// 10. Input Message Box (custom implementation)
public static string ShowInputMessageBox(string title, string prompt, string defaultValue = "")
{
Console.WriteLine("=== Input Message Box ===");
// Create a custom input dialog
Form inputForm = new Form();
inputForm.Text = title;
inputForm.Size = new Size(400, 200);
inputForm.StartPosition = FormStartPosition.CenterScreen;
inputForm.FormBorderStyle = FormBorderStyle.FixedDialog;
inputForm.MaximizeBox = false;
inputForm.MinimizeBox = false;
// Add prompt label
Label promptLabel = new Label();
promptLabel.Text = prompt;
promptLabel.Location = new Point(20, 20);
promptLabel.Size = new Size(360, 40);
inputForm.Controls.Add(promptLabel);
// Add text box
TextBox inputTextBox = new TextBox();
inputTextBox.Text = defaultValue;
inputTextBox.Location = new Point(20, 70);
inputTextBox.Size = new Size(360, 25);
inputForm.Controls.Add(inputTextBox);
// Add OK button
Button okButton = new Button();
okButton.Text = "OK";
okButton.Location = new Point(210, 110);
okButton.Size = new Size(80, 30);
okButton.Click += (sender, e) =>
{
inputForm.DialogResult = DialogResult.OK;
inputForm.Close();
};
inputForm.Controls.Add(okButton);
// Add Cancel button
Button cancelButton = new Button();
cancelButton.Text = "Cancel";
cancelButton.Location = new Point(300, 110);
cancelButton.Size = new Size(80, 30);
cancelButton.Click += (sender, e) =>
{
inputForm.DialogResult = DialogResult.Cancel;
inputForm.Close();
};
inputForm.Controls.Add(cancelButton);
// Set default button and accept button
inputForm.AcceptButton = okButton;
inputForm.CancelButton = cancelButton;
DialogResult result = inputForm.ShowDialog();
string inputValue = inputTextBox.Text;
Console.WriteLine($"Input dialog result: {result}, Input value: '{inputValue}'");
return result == DialogResult.OK ? inputValue : null;
}
// Demonstration method
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("=== C# Message Box Examples ===\n");
Console.WriteLine("Note: These examples require a Windows Forms application context.");
Console.WriteLine("Some examples may not work in console mode.\n");
try
{
// Enable visual styles
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Run different message box examples
Console.WriteLine("1. Information Message Box:");
ShowInformationMessage();
Console.WriteLine();
Console.WriteLine("2. Warning Message Box:");
ShowWarningMessage();
Console.WriteLine();
Console.WriteLine("3. Error Message Box:");
ShowErrorMessage();
Console.WriteLine();
Console.WriteLine("4. Question Message Box:");
ShowQuestionMessage();
Console.WriteLine();
Console.WriteLine("5. Yes/No/Cancel Message Box:");
ShowYesNoCancelMessage();
Console.WriteLine();
Console.WriteLine("6. Retry/Cancel Message Box:");
ShowRetryCancelMessage();
Console.WriteLine();
Console.WriteLine("7. Abort/Retry/Ignore Message Box:");
ShowAbortRetryIgnoreMessage();
Console.WriteLine();
Console.WriteLine("8. Custom Message Box:");
DialogResult customResult = ShowCustomMessageBox(
"Custom Options",
"Choose one of the following options:",
"Option 1", "Option 2", "Option 3"
);
Console.WriteLine();
Console.WriteLine("9. Timeout Message Box:");
ShowTimeoutMessageBox();
Console.WriteLine();
Console.WriteLine("10. Input Message Box:");
string userInput = ShowInputMessageBox(
"User Input",
"Please enter your name:",
"John Doe"
);
if (!string.IsNullOrEmpty(userInput))
{
Console.WriteLine($"User entered: {userInput}");
}
Console.WriteLine();
Console.WriteLine("All message box examples completed!");
}
catch (Exception ex)
{
Console.WriteLine($"Error running examples: {ex.Message}");
}
}
}Intégration Barre d'État Système
Créer applications barre d'état système avec notifications, menus contextuels et opérations d'arrière-plan
Difficulté
5/10
Temps estimé
25 min
Étiquettes
csharp, system tray, notification, background, windows
Prérequis
Windows Forms, Threading basics, Async programming
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Diagnostics;
// Note: These examples require references to System.Windows.Forms and System.Drawing
class SystemTrayExamples : ApplicationContext
{
private NotifyIcon _notifyIcon;
private ContextMenuStrip _contextMenu;
private int _notificationCount = 0;
// Main application context
public SystemTrayExamples()
{
Console.WriteLine("=== System Tray Application Started ===");
// Create and configure the system tray icon
CreateNotifyIcon();
// Create context menu
CreateContextMenu();
// Show initial notification
ShowNotification("System Tray App", "Application started successfully!");
// Start background task for periodic notifications
StartBackgroundTask();
}
// 1. Create and configure NotifyIcon
private void CreateNotifyIcon()
{
_notifyIcon = new NotifyIcon
{
Icon = SystemIcons.Application, // Use default application icon
Text = "System Tray Example Application",
Visible = true
};
// Handle double-click to show main form
_notifyIcon.DoubleClick += (sender, e) =>
{
Console.WriteLine("System tray icon double-clicked");
ShowMainForm();
};
// Handle mouse click events
_notifyIcon.MouseClick += (sender, e) =>
{
if (e.Button == MouseButtons.Right)
{
Console.WriteLine("System tray icon right-clicked");
}
};
}
// 2. Create context menu
private void CreateContextMenu()
{
_contextMenu = new ContextMenuStrip();
// Show main form
ToolStripItem showItem = _contextMenu.Items.Add("Show Main Form");
showItem.Click += (sender, e) => ShowMainForm();
// Separator
_contextMenu.Items.Add(new ToolStripSeparator());
// Actions menu
ToolStripMenuItem actionsItem = (ToolStripMenuItem)_contextMenu.Items.Add("Actions");
ToolStripItem notifyItem = actionsItem.DropDownItems.Add("Send Test Notification");
notifyItem.Click += (sender, e) => ShowNotification("Test", "This is a test notification!");
ToolStripItem logItem = actionsItem.DropDownItems.Add("Log Current Time");
logItem.Click += (sender, e) =>
{
string message = $"Current time logged: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
Console.WriteLine(message);
ShowNotification("Log", message);
};
ToolStripItem infoItem = actionsItem.DropDownItems.Add("Show System Info");
infoItem.Click += (sender, e) => ShowSystemInfo();
// Separator
_contextMenu.Items.Add(new ToolStripSeparator());
// Settings menu
ToolStripMenuItem settingsItem = (ToolStripMenuItem)_contextMenu.Items.Add("Settings");
ToolStripMenuItem soundItem = new ToolStripMenuItem("Enable Sound");
soundItem.Checked = true;
soundItem.Click += (sender, e) =>
{
soundItem.Checked = !soundItem.Checked;
Console.WriteLine($"Sound enabled: {soundItem.Checked}");
};
settingsItem.DropDownItems.Add(soundItem);
ToolStripMenuItem balloonItem = new ToolStripMenuItem("Show Balloon Tips");
balloonItem.Checked = true;
balloonItem.Click += (sender, e) =>
{
balloonItem.Checked = !balloonItem.Checked;
Console.WriteLine($"Balloon tips enabled: {balloonItem.Checked}");
};
settingsItem.DropDownItems.Add(balloonItem);
// Separator
_contextMenu.Items.Add(new ToolStripSeparator());
// About
ToolStripItem aboutItem = _contextMenu.Items.Add("About");
aboutItem.Click += (sender, e) => ShowAboutDialog();
// Exit
ToolStripItem exitItem = _contextMenu.Items.Add("Exit");
exitItem.Click += (sender, e) => ExitApplication();
// Assign context menu to notify icon
_notifyIcon.ContextMenuStrip = _contextMenu;
}
// 3. Show main form (optional)
private void ShowMainForm()
{
Form mainForm = new Form
{
Text = "System Tray Example",
Size = new Size(400, 300),
StartPosition = FormStartPosition.CenterScreen
};
// Add some content to the form
Label label = new Label
{
Text = "This is the main form of the system tray application.\n\n" +
"You can minimize this form to the system tray using the " +
"button below, or close it to keep the application running " +
"in the background.",
Location = new Point(20, 20),
Size = new Size(360, 100),
TextAlign = ContentAlignment.MiddleCenter
};
mainForm.Controls.Add(label);
// Add minimize to tray button
Button minimizeButton = new Button
{
Text = "Minimize to Tray",
Location = new Point(140, 140),
Size = new Size(120, 30)
};
minimizeButton.Click += (sender, e) =>
{
mainForm.Hide();
ShowNotification("Minimized", "Application minimized to system tray");
};
mainForm.Controls.Add(minimizeButton);
// Add status label
Label statusLabel = new Label
{
Text = $"Application started: {DateTime.Now:yyyy-MM-dd HH:mm:ss}",
Location = new Point(20, 200),
Size = new Size(360, 30)
};
mainForm.Controls.Add(statusLabel);
mainForm.FormClosing += (sender, e) =>
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
mainForm.Hide();
ShowNotification("Hidden", "Application running in background");
}
};
mainForm.Show();
}
// 4. Show notification
public void ShowNotification(string title, string message)
{
_notificationCount++;
// Update tray icon text
_notifyIcon.Text = $"System Tray App - {_notificationCount} notifications";
// Show balloon notification
if (_contextMenu != null)
{
var balloonSettingsItem = (ToolStripMenuItem)_contextMenu.Items["Settings"]?.DropDownItems["Show Balloon Tips"];
bool showBalloon = balloonSettingsItem?.Checked ?? true;
if (showBalloon)
{
_notifyIcon.ShowBalloonTip(3000, title, message, ToolTipIcon.Info);
}
}
Console.WriteLine($"Notification #{_notificationCount}: {title} - {message}");
}
// 5. Show system information
private void ShowSystemInfo()
{
string info = $"System Information:\n\n" +
$"Operating System: {Environment.OSVersion}\n" +
$".NET Version: {Environment.Version}\n" +
$"Machine Name: {Environment.MachineName}\n" +
$"User Name: {Environment.UserName}\n" +
$"Processor Count: {Environment.ProcessorCount}\n" +
$"Working Directory: {Environment.CurrentDirectory}\n" +
$"System Directory: {Environment.SystemDirectory}";
Console.WriteLine(info);
// Show in message box
MessageBox.Show(info, "System Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// 6. Show about dialog
private void ShowAboutDialog()
{
string aboutText = "System Tray Example Application\n\n" +
"Version: 1.0.0\n" +
"Author: Example Developer\n" +
"Description: Demonstrates system tray functionality\n\n" +
$"Notifications sent: {_notificationCount}\n" +
$"Application uptime: {DateTime.Now - _startTime:hh\:mm\:ss}";
MessageBox.Show(aboutText, "About", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private DateTime _startTime = DateTime.Now;
// 7. Exit application
private void ExitApplication()
{
DialogResult result = MessageBox.Show(
"Are you sure you want to exit the application?",
"Confirm Exit",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result == DialogResult.Yes)
{
Console.WriteLine("Application exit confirmed");
_notifyIcon.Visible = false;
Application.Exit();
}
}
// 8. Background task for periodic notifications
private void StartBackgroundTask()
{
Task.Run(async () =>
{
while (true)
{
await Task.Delay(30000); // Wait 30 seconds
// Check if application is still running
if (!_notifyIcon.Visible)
break;
// Show periodic notification
ShowNotification(
"Status Update",
$"Application is still running. Uptime: {DateTime.Now - _startTime:hh\:mm\:ss}"
);
// Clean up old notifications (keep only last 10)
if (_notificationCount > 10)
{
Console.WriteLine("Notification count reset to prevent overflow");
_notificationCount = 5;
}
}
});
}
// 9. Handle application exit
protected override void ExitThreadCore()
{
Console.WriteLine("System tray application is shutting down");
if (_notifyIcon != null)
{
_notifyIcon.Visible = false;
_notifyIcon.Dispose();
}
if (_contextMenu != null)
{
_contextMenu.Dispose();
}
base.ExitThreadCore();
}
// Main entry point
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("=== C# System Tray Examples ===\n");
Console.WriteLine("Starting system tray application...");
Console.WriteLine("Right-click the system tray icon to access the context menu.");
Console.WriteLine("Double-click to show the main form.");
Console.WriteLine("Press Ctrl+C in this console to exit the application.\n");
try
{
// Enable visual styles
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Create and run the application context
var applicationContext = new SystemTrayExamples();
Application.Run(applicationContext);
}
catch (Exception ex)
{
Console.WriteLine($"Error running system tray application: {ex.Message}");
}
}
}
// Alternative simple system tray example
class SimpleSystemTrayApp
{
public static void RunSimpleExample()
{
Console.WriteLine("=== Simple System Tray Example ===");
// Create simple notify icon
using (var notifyIcon = new NotifyIcon())
{
notifyIcon.Icon = SystemIcons.Information;
notifyIcon.Text = "Simple System Tray App";
notifyIcon.Visible = true;
// Create simple context menu
var contextMenu = new ContextMenuStrip();
contextMenu.Items.Add("Show Message", null, (s, e) =>
{
MessageBox.Show("Hello from system tray!", "Message", MessageBoxButtons.OK);
});
contextMenu.Items.Add("-");
contextMenu.Items.Add("Exit", null, (s, e) =>
{
notifyIcon.Visible = false;
Application.Exit();
});
notifyIcon.ContextMenuStrip = contextMenu;
// Show initial notification
notifyIcon.ShowBalloonTip(3000, "Simple App", "Simple system tray app started!", ToolTipIcon.Info);
Console.WriteLine("Simple system tray app running. Close this window to exit.");
// Keep application running
Application.Run();
}
}
}Outils
Outils souvent utilisés avec cet exemple
Associé