C# 在WindowsMobile 6.5中将列表框显示为一个项目的黑客

C# 在WindowsMobile 6.5中将列表框显示为一个项目的黑客,c#,winforms,windows-mobile,compact-framework,opennetcf,C#,Winforms,Windows Mobile,Compact Framework,Opennetcf,我正在为一个仓库开发一个windows mobile应用程序。由于基本功能已经实现,我正在努力改进应用程序的整体外观。我几乎没有什么事情要做,我非常感谢任何帮助(我对C#还相当陌生,但愿意学习:-) 首先,我无法让覆盖的OnPaint方法工作,即使在模拟器上也不行,所以我想我遗漏了一些东西。我还需要做其他事情吗 public partial class Form1 : Form { protected override void OnPaint(PaintEvent

我正在为一个仓库开发一个windows mobile应用程序。由于基本功能已经实现,我正在努力改进应用程序的整体外观。我几乎没有什么事情要做,我非常感谢任何帮助(我对C#还相当陌生,但愿意学习:-)

首先,我无法让覆盖的OnPaint方法工作,即使在模拟器上也不行,所以我想我遗漏了一些东西。我还需要做其他事情吗

      public partial class Form1 : Form {
         protected override void OnPaint(PaintEventArgs e) {
       base.OnPaint(e);
      /*some basic painting here */
      }}
第二个问题源于我试图使列表框“作为一个”可选择。我不希望用户点击其中的特定项目,只是一个完整的列表框。为了让您了解一些情况,我想在列表中显示一些类似于此的列表框:

有没有办法让它们像列表中的普通项目一样可选择

我无法解决这个问题,所以我尝试了不同的方法-->用这些列表框制作位图,并将位图加载到列表中

因为compact框架没有像entity(DrawToBitmap)那样的内置整洁方法,所以我尝试了这种方法(),但它没有任何好处——在“工作”之后,它什么也没有改变。 我也尝试过这个,从一个使用屏幕截图的代码片段,也没有成功

      System.Drawing.Bitmap destinationBmp = new System.Drawing.Bitmap(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, 
             System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);

         System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(destinationBmp);
         GraphicsEx gx = GraphicsEx.FromGraphics(g);
         //gx.CopyFromScreen(0, 0, 0, 0, Forms.Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
         //gx.CopyFromScreen(0, hehe.Top, 0, hehe.Bottom + 10, hehe.Size, CopyPixelOperation.SourceCopy);

         gx.CopyGraphics(listbox, listbox.Bounds);
         g.DrawImage(destinationBmp, 0, 200);

我错过了什么?或者,有没有更好的方法来实现这一点?

您可以创建一个称为所有者绘制的列表框。您可以控制图形,并且可以在一个列表项中绘制多行文本,供用户单击。如果我正确理解你的问题,我想这会给你你想要的结果

是一个MSDN链接,引导您使用紧凑的框架创建一个所有者绘制的列表框


如果这不适合您,那么您可以创建一个非常类似于WPF对象的自定义控件。如果您不熟悉,StackPanel允许您向其中添加子控件。StackPanel水平或垂直“堆叠”这些子控件。如果您实现了滚动和选择,您将拥有一个穷人列表框,它允许您将可变高度自定义控件附加到每个列表框项,而不是简单的字符串。我建议先看看owner draw是否适合您,因为它需要编写更多更少的代码。

这是我最终使用的方法,但我仍然无法让OnPaint覆盖正常工作,原因很明显:(