我正在尝试用 C# 编写 Windows 窗体 MusicPlayer 应用程序。
该应用程序应显示一个列表并具有一些播放/停止按钮。
我半小时前才开始,但我的设计已经快完成了。现在我有 3 件事需要解决。一个错误和两个好看的东西:
您可以设置TextAlign除第一列标题之外的所有标题;它总是左对齐。要改变它,你需要拥有者绘制它。
没有自动填充选项,因此您需要编写一个setColumnwidth函数,该函数循环遍历除最后一列之外的所有列并对它们求和Widths;然后它从 ListView 中减去总和Clientsize.Width并设置最后一列的宽度。
网格线中的显示错误对我来说是新的;到目前为止我不知道如何解决它;也许业主绘图也会有帮助..?
更新:
这是一些代码:
void setLastColumnTofill(ListView lv)
{
int sum = 0;
int count = lv.Columns.Count;
for (int i = 0; i < count - 1; i++) sum += lv.Columns[i].Width;
lv.Columns[count - 1].Width = lv.ClientSize.Width - sum;
}
Run Code Online (Sandbox Code Playgroud)
设置完成后,OwnerDraw = true您可以对三个(都需要!)绘制事件进行编码:
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds);
e.Graphics.DrawRectangle(SystemPens.GradientInactiveCaption,
new Rectangle(e.Bounds.X , 0, e.Bounds.Width , e.Bounds.Height) );
string text = listView1.Columns[e.ColumnIndex].Text;
TextFormatFlags cFlag = TextFormatFlags.HorizontalCenter
| TextFormatFlags.VerticalCenter;
TextRenderer.DrawText(e.Graphics, text, listView1.Font, e.Bounds, Color.Black, cFlag);
}
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
e.DrawDefault = true;
}
Run Code Online (Sandbox Code Playgroud)
您可能想稍微调整一下颜色或宽度。
如果您有一个包含用于显示排序顺序(或其他内容)的图像的 ImageList,您也可以添加它来绘制它们:
ColumnHeader colH = listView1.Columns[e.ColumnIndex];
int ii = colH.ImageIndex;
if (ii >= 0 && ii < imageList1.Images.Count)
e.Graphics.DrawImage(imageList1.Images[ii],
e.Bounds.Width + e.Bounds.X - imageList1.ImageSize.Width, 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4332 次 |
| 最近记录: |