【发布时间】:2010-12-06 00:57:44
【问题描述】:
我目前正在开发一个 c# 应用程序。我正在制作自己的自定义消息框,所以我想知道是否可以将默认系统图标(即您将在标准 MessageBox 上看到的图标之一)分配给标签。
【问题讨论】:
我目前正在开发一个 c# 应用程序。我正在制作自己的自定义消息框,所以我想知道是否可以将默认系统图标(即您将在标准 MessageBox 上看到的图标之一)分配给标签。
【问题讨论】:
System.Drawing.Icon myIcon = new System.Drawing.Icon(System.Drawing.SystemIcons.Question,32,32);
label.Image = myIcon.ToBitmap();
【讨论】:
您可以与 System.Drawing 和 System.Windows.Forms 互操作:
System.Drawing.Icon icon = System.Drawing.SystemIcons.Warning;
BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
image1.Source = bs;
【讨论】:
SLaks 的解决方案可能是最简单的方法。如果出于某种原因,您不想使用 Windows 窗体功能,那么您可以很容易地自己实现:
public enum SystemIcons
{
Application = 32512,
Error = 32513,
Hand = Error,
Question = 32514,
Warning = 32515,
Exclamation = Warning,
Information = 32516,
Asterisk = Information,
WinLogo = 32517,
Shield = 32518,
}
public static ImageSource LoadSystemIcon(SystemIcons iconId)
{
string iconName = "#" + ((int)iconId);
IntPtr hIcon = LoadIcon(IntPtr.Zero, iconName);
if (hIcon == IntPtr.Zero)
return null;
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
[DllImport("user32.dll")]
static extern IntPtr LoadIcon(IntPtr hInstance, string lpIconName);
【讨论】: