fileItem=new ButtonItem(\); fileItem.Text=\File5.txt\; item.SubItems.Add(fileItem);
// 添加关闭菜单
item=new ButtonItem(\); item.ImageIndex=2; item.Text=\;
item.Shortcuts.Add(eShortcut.CtrlX); item.Category=\; bar.Items.Add(item);
m_DotNetBar.Items.Add(item.Copy()); // 添加保存菜单
item=new ButtonItem(\); item.ImageIndex=3; item.Text=\;
item.Shortcuts.Add(eShortcut.CtrlS); item.Category=\; bar.Items.Add(item);
m_DotNetBar.Items.Add(item.Copy()); // 添加打印预览菜单
item=new ButtonItem(\); item.ImageIndex=6;
item.Text=\Pre&view\; item.Category=\; item.BeginGroup=true; bar.Items.Add(item);
m_DotNetBar.Items.Add(item.Copy()); // 添加打印菜单
item=new ButtonItem(\); item.ImageIndex=5; item.Text=\;
item.Category=\;
item.Shortcuts.Add(eShortcut.CtrlP); bar.Items.Add(item);
m_DotNetBar.Items.Add(item.Copy()); // 添加邮件菜单
item=new ButtonItem(\); item.ImageIndex=4; item.Text=\;
}
item.Category=\; item.BeginGroup=true; bar.Items.Add(item);
m_DotNetBar.Items.Add(item.Copy());
// 添加“添加/删除“按钮
CustomizeItem citem=new CustomizeItem(); bar.Items.Add(citem);
// 由于我们将使用ImageList,Bar酒吧必须被添加到DotNetBarManager中 // 将Bar加入DotNetBarManager m_DotNetBar.Bars.Add(bar); bar.DockSide=eDockSide.Top; 为所有选项添加“事件”
this.m_DotNetBar.ItemClick += new System.EventHandler(this.BarItemClick); private void BarItemClick(object sender, EventArgs e) { BaseItem item = sender as BaseItem; if (item == null || item.Name == \ || item.SystemItem) return; MessageBox.Show(\'\ + item.Name + \clicked\); }
设置窗体的大小
AutoScaleBaseSize属性的值在窗体显示时使用,用来计算该窗体的缩放因子。窗体将自动缩放基大小(用作与系统的字体大小进行比较的基准),以确定使用自动缩放时窗体的缩放量。如果要确定根据特定字体窗体将自动缩放到的大小,请使用GetAutoScaleSize方法。 示例: this.AutoScaleBaseSize = new System.Drawing.Size(11, 17);
该属性将按着Size(a,b)内a与b的比例大小自动调整窗口大小,但是值得注意的是:a与b的绝对值越大,窗口越小。
//设置工作区域的大小
this.ClientSize = new System.Drawing.Size(351, 207);
ImageList组件
概述
ImageList组件就是一个图像列表。一般情况下,这个属性用于存储一个图像集合,这些图像用作工具栏图标或TreeView控件上的图标。许多控件都包含ImageList属性。这个属性一般和ImageIndex属性一起使用。ImageList属性设置为ImageList组件的一个实例,ImageIndex属性设置为ImageList中应在控件中显示的图像的索引。使用ImageIndex.Images属性的Add方法可以把图像添加到ImageList组件中。Images属性返回一个ImageCollection。
两个最常用的属性是ImageSize和ColorDepth。ImageSize使用Size结构作为其值。其默认值是16×16,但可以取1~256之间的任意值。ColorDepth使用ColorDepth枚举作
为其值。颜色深度值可以从4位~32位。在.NET Framework 1.1中,默认是ColorDepth.Depth8Bit。
示例
private System.Windows.Forms.ImageList imageList1;
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject(\
this.imageList1.TransparentColor = System.Drawing.Color.Transparent; // 下面加几个Image
this.imageList1.Images.SetKeyName(0, \
this.imageList1.Images.SetKeyName(1, \book.ico\this.imageList1.Images.SetKeyName(2, \colour.ico\//把imageList1赋给treeView1 this.treeView1.ImageIndex = 0;
this.treeView1.ImageList = this.imageList1;
this.treeView1.Location = new System.Drawing.Point(3, 3); this.treeView1.Name = \this.treeView1.SelectedImageIndex = 0;
this.treeView1.Size = new System.Drawing.Size(579, 450); this.treeView1.TabIndex = 0; // 以上code在Designer完成
// 在添加TreeNode的时候, 把Image加上
// 未选中时,这个node显示imageList1中的\, 选中后显示\book.ico\
TreeNode node = new TreeNode(\, 0, 1); treeView1.Nodes.Add(node); treeView1.ExpandAll();
讨论
ImageList里面的图片的颜色 ImageList里面的图片的大小
引起ImageList里面图片颜色失真的原因是在Design-Time就在VS.NET中往ImageList里面添加了Images。 当用户一边在“Image Collection Editor”对话框里面添加图片,VS.NET一边就已经把这些图片装载到resource文件里面了。这样,以后程序运行时就只需要访问resource文件就可以载入所有图片而不需要依赖原始的图片文件。 但是问题在于从结果看,当VS.NET在Design-Time往resource文件里面添加图片时并没有使用用户指定的ColorDepth(例如Depth32Bit),而用了ImageList.ColorDepth的默认值(Depth8Bit)。这样,等程序运行时,即使ImageList.ColorDepth指定了Depth32Bit也无济于事,因为原始的素材本身只有8bit的颜色。这基本上就是失真的问题的原因。 因此,解决方案是:不在Design-Time用VS.NET往ImageList里面添加图片,而是在程序运行时先指定32Bit的ColorDepth,然后再添加图片,如以下例子代码: this.imageList1.ColorDepth=ColorDepth.Depth32Bit;
this.imageList1.Images.Add(Image.FromFile(@\
this.imageList1.Images.Add(Image.FromFile(@\if\
this.imageList1.Images.Add(Image.FromFile(@\
this.imageList1.Images.Add(Image.FromFile(@\\ 这里需要注意的是,必须先指定ColorDepth,然后再添加图片。因为对ColorDepth赋值会清空所有图片。BTW,ImageList.ColorDepth的默认值是Depth8Bit,而非文档上所述Depth4Bit。这一点很容易可以通过写一段例子代码来验证,也可以通过很多Decompiler来查看ImageList的构造函数的实现来验证。 的确,通过ImageList.Images[i]获得图片的大小都是统一的,都等于ImageList.ImageSize。这个问题的原因在于ImageList在返回Images[i]的过程中并没有返回原始的图片,而是按照ImageList.ImageSize创建了一个新的Bitmap,并把原始图片的内容重新绘制上去以后再返回给用户。关于这一点,可以用一些Decompiler工具如ILDASM.exe或者Anakrino通过察看私有函数ImageList.GetBitmap(int index)来验证。我想现在paulluo0739应该能够理解为什么ImageList里面的图片都是一样大的了。 ImageSize同ColorDepth类似,也不宜在运行时改动,一旦重新赋值,就会清空所有的图片。因此,如果程序运行时需要某一图片的不同大小的版本,可以考虑使用多个不同ImageSize的ImageList。
关于ImageList组件的用法还存在问题
控件BubbleBar的使用
使用效果
其实使用很简单,只有将BubbleBar控件拖到窗体上,然后,就可以添加“Tab”和
“Button”了。 一些有用的语句
private void bubbleButton_Click(object sender, DevComponents.DotNetBar.ClickEventArgs e) {
DevComponents.DotNetBar.BubbleButton button=sender as DevComponents.DotNetBar.BubbleButton;
textBox1.Text=button.Name+\, \+button.TooltipText; }
private void checkBox2_CheckedChanged(object sender, System.EventArgs e) { if(checkBox2.Checked) bubbleBar1.ButtonBackgroundStretch=true; else bubbleBar1.ButtonBackgroundStretch=false; // Apply UI changes and refresh //刷新 bubbleBar1.RecalcLayout();
bubbleBar1.Refresh(); }
private void numericUpDown1_ValueChanged(object sender, System.EventArgs e) {
// 图像分配给控件时总是匹配最佳外观的尺寸是最好的 bubbleBar1.ImageSizeNormal=new Size((int)numericUpDown1.Value,(int)numericUpDown1.Value); bubbleBar1.RecalcLayout(); bubbleBar1.Refresh(); }
控件DataGridViewX的使用
说明
(37) 控件DataGridView与DataGridView的基本用法类似。 (38) DataGridView有自动按列排序的功能。 (39) dataGridViewX1.SelectedRows.Count。
(40) dataGridViewX1.SelectedRows[0].Cells[0].Value.ToString()。 DataGridView的示例代码
#region 设置DataGridView的显示格式
dgvMachinceList.AutosizeColumnsMode = System.Windows.Forms.DataGridViewAutosizeColumnsMode.Fill;
dgvMachinceList.AutoGenerateColumns = false; dgvMachinceList.AllowUserToAddRows = false;
dgvMachinceList.AllowUserToResizeColumns = true; ////////////////////////////////////////////////////// TabControlPanel tcp;
foreach (Control c in tabControl1.Controls) if (c is TabControlPanel) { tcp = (TabControlPanel)c;