标签: ownerdrawn

TreeView通过某些节点删除CheckBox

我想删除CheckBoxes,其中Node.Type是5或6.我使用此代码:

private void TvOne_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
    int type = (e.Node as Node).typ;
    if (type == 5 || type == 6)
    {
        Color backColor, foreColor;
        if ((e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected)
        {
            backColor = SystemColors.Highlight;
            foreColor = SystemColors.HighlightText;
        }
        else if ((e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot)
        {
            backColor = SystemColors.HotTrack;
            foreColor = SystemColors.HighlightText;
        }
        else
        {
            backColor = e.Node.BackColor;
            foreColor = e.Node.ForeColor;
        }
        using (SolidBrush brush = new SolidBrush(backColor))
        {
            e.Graphics.FillRectangle(brush, e.Node.Bounds);
        }
        TextRenderer.DrawText(e.Graphics, e.Node.Text, this.TvOne.Font,
            e.Node.Bounds, foreColor, backColor); …
Run Code Online (Sandbox Code Playgroud)

c# checkbox treeview ownerdrawn winforms

26
推荐指数
3
解决办法
3万
查看次数

如何以不同的颜色绘制选定的列表框项?

是否可以更改TListBox中的项目选择焦点颜色和文本颜色?

如果项目中未启用主题,或者列表框样式设置为owner-draw,则项目周围的选项将显示为蓝色,我认为这是由系统的外观设置全局定义的.

我想将所选项目的颜色更改为自定义颜色.

举个例子,结果会是这样的:

在此输入图像描述

请注意,在Paint中修改了最后一个列表框以说明示例.

delphi listbox ownerdrawn

12
推荐指数
1
解决办法
2万
查看次数

在ListView控件中闪烁(OwnerDraw,Virtual)

这个问题可能被视为使用ownerdraw和virtualmode在listview中闪烁的后续行动.

我有一个ListView控件Virtual mode,我尝试执行自定义绘图.项目渲染通过以下方法覆盖完成:

protected override void OnDrawItem(DrawListViewItemEventArgs eventArgs) 
Run Code Online (Sandbox Code Playgroud)

如引用的问题所述,自定义绘图会在鼠标悬停事件上引入闪烁.调试器告诉我这是由于过多的自定义绘制事件被触发而发生的.


现在 - 引用问题的接受答案告诉我们:

这是.NET的ListView中的一个错误,你不能通过双缓冲解决它.

  • 那么,这些信息有多可靠?这真的是个错误吗?或者我们可能只是试图切断部分消息并希望它不会改变可见行为?

  • 这是真的,如果我有我的所有者绘制例程ListViewin in Virtual Mode,我可以抑制这些Custom Draw事件并且只执行我的绘图WM_PAINT或者,也许,这在某些情况下是不正确的?

  • System.Windows.Forms控制能够在WM_PAINT不改变其初始行为的情况下完成所有绘画的前提条件是什么?

c# listview flicker ownerdrawn winforms

12
推荐指数
2
解决办法
6243
查看次数

在Ownerist和OwnerDraw设置为True的TListView上显示错误提示

我使用Delphi 2007.我有一个TListViewwith OwnerDataOwnerDraw设置为True.ViewStyle设置为vsReport.

我有一个record.

type TAList=record
  Item:Integer;
  SubItem1:String;
  SubItem2:String;
end;

var
 ModuleData: array of TAList;

procedure TForm1.ListView3Data(Sender: TObject; Item: TListItem);
begin
 Item.Caption := IntToStr(ModuleData[Item.Index].Item);
 Item.SubItems.Add(ModuleData[Item.Index].SubItem1);
 Item.SubItems.Add(ModuleData[Item.Index].SubItem2);
end;

procedure TForm1.ListView3DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var
 LIndex : integer;
 LRect: TRect;
 LText: string;
 TTListView: TListView;
begin
 TTListView := TListView(Sender);

 if (Item.SubItems[0] = '...') then
 begin
  TTListView.Canvas.Brush.Color := clHighlight;
  TTListView.Canvas.Font.Color  := clHighlightText;
 end else
 begin
  TTListView.Canvas.Brush.Color := TTListView.Color;
  TTListView.Canvas.Font.Color …
Run Code Online (Sandbox Code Playgroud)

delphi hint ownerdrawn delphi-2007 tlistview

11
推荐指数
1
解决办法
2178
查看次数

C#ListView详细信息,突出显示单个单元格

我在C#中使用ListView来制作网格.我想找到一种能够以编程方式突出显示特定单元格的方法.我只需要突出显示一个单元格.

我已尝试使用所有者绘制的子项目,但使用下面的代码,我得到突出显示的单元格,但没有文字!有关于如何使其工作的任何想法?谢谢你的帮助.

//m_PC.Location is the X,Y coordinates of the highlighted cell.


void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    if ((e.ItemIndex == m_PC.Location.Y) && (e.Item.SubItems.IndexOf(e.SubItem) == m_PC.Location.X))
        e.SubItem.BackColor = Color.Blue;
    else
        e.SubItem.BackColor = Color.White;
    e.DrawBackground();
    e.DrawText();
}
Run Code Online (Sandbox Code Playgroud)

c# listview highlight ownerdrawn

10
推荐指数
1
解决办法
3万
查看次数

C#:TreeView所有者使用ownerdrawtext进行绘制,并在单击节点时使用奇怪的黑色突出显示

我的DrawMode设置为OwnerDrawText并上涨到DrawNode事件,加入我的代码绘制文本的方式我想和所有的作品以及保存的一些奇怪的黑色选择当选择一个节点突出.

没问题,我添加了逻辑来检查节点的状态是否突出显示并绘制了我自己的突出显示,除了在单击节点时添加黑色突出显示,而不仅仅是选中...一旦鼠标按钮突出显示我的矩形突出显示被释放但确实被吸引并眨眼......这很烦人.:/

显然我忘了真的问我的问题......如果没有完全处理绘图,怎么会去除选择?

c# treeview ownerdrawn

9
推荐指数
1
解决办法
1万
查看次数

TreeView.DrawNode的问题 - OwnerDrawText

我有一个连接到远程服务器的应用程序,并在需要时轮询数据.它有一个TreeView,其中节点表示可用的对象,文本的颜色表示数据是否已加载; 灰色斜体表示未加载,黑色,常规文本被加载.

目前我已将TreeView设置为OwnderDrawText并使TreeView.DrawNode函数简单地绘制文本,如下所示:

private void TreeViewDrawNode(object sender, DrawTreeNodeEventArgs e)
{
    if (!e.Node.IsVisible)
    {
        return;
    }

    bool bLoaded = false;

    if (e.Bounds.Location.X >= 0 && e.Bounds.Location.Y >= 0)
    {
       if(e.Node.Tag != null)
       {
           //...
           // code determining whether data has been loaded is done here
           // setting bLoaded true or false
           //...
       }
       else
       {
           e.DrawDefault = true;
           return;
       }

       Font useFont = null;
       Brush useBrush = null;

       if (bLoaded)
       {
           useFont = e.Node.TreeView.Font;
           useBrush = SystemBrushes.WindowText;
        }
        else
        {
            useFont …
Run Code Online (Sandbox Code Playgroud)

c# treeview ownerdrawn winforms

9
推荐指数
1
解决办法
7531
查看次数

如何在没有填充的情况下绘制字符串

我正在使用该GraphicsPath.AddString()函数,但它在文本周围绘制了一些空格.任何想法如何绘制没有填充的字符串,只有文本的路径?

我的代码是这样的:

GraphicsPath gp = new GraphicsPath();

gp.AddString(text, font.FontFamily, (int)font.Style, font.Size,
    boundsRectangle, format);

g.DrawPath(pen, gp);
Run Code Online (Sandbox Code Playgroud)

.net c# gdi ownerdrawn

9
推荐指数
1
解决办法
2006
查看次数

如何使用C#(Windows窗体)启用控件的双缓冲?

如何使用C#(Windows窗体)启用控件的双缓冲?

我有一个面板控件,我正在绘制内容,也是一个所有者绘制的选项卡控件.两者都有闪烁,所以如何启用双缓冲?

.net c# doublebuffered ownerdrawn winforms

8
推荐指数
1
解决办法
3万
查看次数

如何在AdvancedCustomDrawItem期间绘制TTreeView的样式选择矩形?

我正在TTreeView使用OnAdvancedCustomDrawItem事件从头开始自定义绘图,我想知道如何在我的所有者绘制项目的背景中正确渲染这些选择和热矩形?它们是Vista/7风格,所以我不能简单地用一些纯色填充背景.

在此输入图像描述

我试图在cdPostPaint舞台上绘制我的项目,但是如果我DefaultDraw := TruecdPrePaint舞台上离开以绘制选择背景,则会发生完整的默认绘图,包括项目文本.

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages,
  DefaultDraw: Boolean);
begin
  case Stage of
    cdPreErase:
    begin
      DefaultDraw := True;
    end;

    cdPostErase:
    begin
      DefaultDraw := True;
    end;

    cdPrePaint:
    begin
      // I thought this will paint only the selected/hot backgrounds, 
      // however this will paint whole item, including text.
      DefaultDraw := True;
    end;

    cdPostPaint:
    begin
      DefaultDraw := False;

      // painting my owner-draw text
      // ......... …
Run Code Online (Sandbox Code Playgroud)

delphi treeview ownerdrawn selection

8
推荐指数
1
解决办法
4849
查看次数