[FAQ]关于C#WINDOWS开发-复杂控件程序
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
linkLabel1.Links.Clear(); // 清除链接标签中的所有超级链接
// 向链接标签中加入两个超级链接
linkLabel1.Links.Add(3,24,"http://www.microsoft.com");
linkLabel1.Links.Add(30,5,"http://www.yahoo.com");
// 获取主窗体的所有字体族
GetFontFamilies();
cbxFont.SelectedIndex = 32; // 设置组合框的当前选择项
lbxSize.SelectedIndex = 1; // 设置列表框的当前选择项
}
/// <summary>
/// 用于保存主窗体支持的所有字体族的名称
/// </summary>
private string[] fontFamilyNames;
/// <summary>
/// 获取主窗体支持的字体族
/// </summary>
private void GetFontFamilies()
{
Graphics g = this.CreateGraphics();
FontFamily[] ffs = FontFamily.GetFamilies( g );
fontFamilyNames = new string[ffs.Length];
for( int i=0; i<ffs.Length;i++){
fontFamilyNames = ffs.Name;
cbxFont.Items.Add( ffs.Name );}
}
// 组合框cbxFont的SelectedIndexChanged事件的处理方法
private void ChangeFont(object sender, System.EventArgs e)
{
float fontsize;
// 从列表框lbxSize中获取字体的大小
if( lbxSize.SelectedIndex == -1 )
fontsize = float.Parse(lbxSize.Items[1].ToString());
else
fontsize = float.Parse(lbxSize.SelectedItem.ToString ());
// 创建新的字体对象并把它赋给文本框控件txtEdit
txtEdit.Font = new Font(cbxFont.Text,fontsize);
}
// 列表框lbxSize的SelectedIndexChanged事件的处理方法
private void ChangeFontSize(object sender, System.EventArgs e)
{
string fontname;
// 从组合框cbxFont中获取字体族的名称
if( cbxFont.SelectedIndex == -1 )
fontname = cbxFont.Items[32].ToString();
else
fontname = cbxFont.Text;
// 创建新的字体对象并把它赋给文本框控件txtEdit
txtEdit.Font = new Font(fontname,
float.Parse(lbxSize.SelectedItem.ToString()));
}
// 按钮控件btnCopy的Click事件的处理方法
private void btnCopy_Click(object sender, System.EventArgs e)
{
// 把文本框中当前选择的内容复制到剪贴板中
if( txtEdit.SelectionLength > 0 )
txtEdit.Copy();
}
// 按钮控件btnCut的Click事件的处理方法
private void btnCut_Click(object sender, System.EventArgs e)
{
// 把文本框中当前选择的内容复制到剪贴板中
// 并把它从文本框中删除
if( txtEdit.SelectionLength > 0 )
txtEdit.Cut();
}
// 按钮控件btnPaste的Click事件的处理方法
private void btnPaste_Click(object sender, System.EventArgs e)
{
// 把剪贴板中的内容复制到文本框的当前位置上
txtEdit.Paste();
}
// 按钮控件btnUndo的Click事件的处理方法
private void btnUndo_Click(object sender, System.EventArgs e)
{
// 撤销上一次的操作
// 首先判断上一次的操作能否撤消
if( txtEdit.CanUndo == True ){
txtEdit.Undo();
txtEdit.ClearUndo();
}
}
// 链接控件linkLabel1的LinkClicked事件的处理方法
private void linkLabel1_LinkClicked(object sender,
System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
{
// 打开浏览器浏览被单击的超级链接
if( e.Link.LinkData.ToString() != null )
System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
}
// 下面两个事件处理方法用来完成组合框控件的自绘功能
// 组合框控件cbxFont的MeasureItem事件的处理方法
private void MeasureCbxItem(object sender,
System.Windows.Forms.MeasureItemEventArgs e)
{
// 设定每一项的宽度和高度
e.ItemHeight = 20;
e.ItemWidth = 200;
}
// 组合框控件cbxFont 的DrawItem事件的处理方法
private void DrawCbxItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{
// 以不同的字体显示相应的字体族的名称
Font f = new Font( fontFamilyNames[e.Index],12 );
Bitmap bmp = new Bitmap("ttfont.bmp");
bmp.MakeTransparent(Color.White);
Graphics g = e.Graphics;
e.DrawBackground();
SolidBrush b = new SolidBrush( e.ForeColor );
g.DrawImage( bmp,e.Bounds.X,e.Bounds.Y );
g.DrawString( fontFamilyNames[e.Index],f,b,e.Bounds.X+18,e.Bounds.Y);
e.DrawFocusRectangle();
}