我有一个用Java开发的小应用程序,我也想用C#构建它。但是我遇到面板尺寸限制。
通过读取文件,我将一些自定义面板作为记录添加到窗体的保持器面板中,并针对该文件中的每一行在我的保持器面板中实例化一个新对象。
在Java中,您可以在JPanel
中添加任意数量的对象,它可以使用JScrollPane
调整大小并查看其中的所有对象。无论如何,我都有一个内部有1554
条记录的文件,而我的Java应用程序将显示所有对象,但是在C#中,由于大小限制,它仅向我显示738
条记录。
我尝试将一个面板“ b”添加到该持有人面板,并在该面板b中添加所有记录(自定义面板),并将其高度设置为Int32.MaxValue
。
我已将BorderStyle
设置为FixedSingle
,以便能够查看面板b的大小。它使我可以滚动超过Int16.MaxValue
,但是我的对象仅显示到该Int16.MaxValue
值为止。
唯一的解决方案是分页所有记录?
答案 0 :(得分:0)
将ListView设置为您显示的控件并不难。
您只需要自己绘制其项的某些部分。
设置:
1. ListView.OwnerDraw
= true
2. ListView.View
= View.Details
3.添加一列,将ListView的大小减去ScrollBar(SystemInformation.VerticalScrollBarWidth
)的大小
4. ListView.HeaderStyle
= none
,如果您不想显示标题。
5.订阅ListView.DrawSubItem
事件
6.添加一个ImageList
,将其 ImageSize.Height
设置为ListView的Items高度,然后将其选择为ListView.StateImageList
(这样就不会创建自定义控件以定义项目高度的必要条件)。
在这里,我添加了一个实用程序,用于根据“项目”文本的当前对齐方式选择“文本”格式设置样式。如果仅将文本向左对齐,则没有必要。
如果要添加到ListView的项目列表非常长,则可以使用VirtualMode
。
与您所显示的没什么不同,对吧?
Color lvPanelsItemCurrentBackColor = Color.FromArgb(58, 188, 58);
Color lvPanelsItemSelectedBackColor = Color.FromArgb(48, 48, 48);
Color lvPanelsItemBackColor = Color.FromArgb(28,28,28);
Color lvPanelsItemForeColor = Color.White;
private void lvPanels_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
var lView = sender as ListView;
TextFormatFlags flags = GetTextAlignment(lView, e.ColumnIndex);
Color itemBackColor = lvPanelsItemBackColor;
Rectangle itemRect = e.Bounds;
itemRect.Inflate(-2, -2);
if (e.Item.Selected || e.Item.Focused) {
itemBackColor = e.Item.Focused ? lvPanelsItemCurrentBackColor : lvPanelsItemSelectedBackColor;
}
using (SolidBrush bkgrBrush = new SolidBrush(itemBackColor)) {
e.Graphics.FillRectangle(bkgrBrush, itemRect);
}
TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, lvPanelsItemForeColor, flags);
}
private TextFormatFlags GetTextAlignment(ListView lstView, int colIndex)
{
TextFormatFlags flags = (lstView.View == View.Tile)
? (colIndex == 0) ? TextFormatFlags.Default : TextFormatFlags.Bottom
: TextFormatFlags.VerticalCenter;
flags |= TextFormatFlags.LeftAndRightPadding | TextFormatFlags.NoPrefix;
switch (lstView.Columns[colIndex].TextAlign)
{
case HorizontalAlignment.Left:
flags |= TextFormatFlags.Left;
break;
case HorizontalAlignment.Right:
flags |= TextFormatFlags.Right;
break;
case HorizontalAlignment.Center:
flags |= TextFormatFlags.HorizontalCenter;
break;
}
return flags;
}