小编And*_*att的帖子

拥有多个指数有哪些缺点?

我最近通过给SQLite一个很好的索引来加速一个复杂的查询.这样的结果让我想知道是否应该索引常用于JOIN或ORDER BY子句的许多其他字段.但是我不想过度热心并让它适得其反:我认为必须有一些理由创建索引,或者默认情况下每个字段都会被编入索引.

我在这种情况下使用SQLite,但当然也欢迎DBMS不可知的建议.

sql database sqlite indexing rdbms-agnostic

17
推荐指数
4
解决办法
2万
查看次数

有没有办法在.NET中获得不同大小的Windows系统图标?

特别是我希望能够在运行时获得小(16 x 16)图标.

我试过这个:

new Icon(SystemIcons.Error, SystemInformation.SmallIconSize)
Run Code Online (Sandbox Code Playgroud)

据称"试图找到符合要求尺寸的图标版本",但它仍然给我一个32 x 32的图标.我也尝试过:

Size iconSize = SystemInformation.SmallIconSize;
Bitmap bitmap = new Bitmap(iconSize.Width, iconSize.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
    g.DrawIcon(SystemIcons.Error, new Rectangle(Point.Empty, iconSize));
}
Run Code Online (Sandbox Code Playgroud)

但这只是将32 x 32图标缩小为丑陋的16 x 16.

我考虑过将图标从VS图像库中拉出来,但我真的希望它们随操作系统动态变化(XP上的XP图标,Vista上的Vista图标等).我愿意P/Invoke,如果这是它需要的.

.net c# icons winforms

17
推荐指数
2
解决办法
6594
查看次数

我可以在AfterLabelEdit期间将节点插入TreeView而不开始编辑它们吗?

我有一个子类,System.Windows.Forms.TreeView它手动"绑定"到一组分层数据.我希望用户能够编辑树的标签,并将更改反映回数据.所以我设置LabelEdit为true并覆盖OnAfterLabelEdit到:

protected override void OnAfterLabelEdit(NodeLabelEditEventArgs e)
{
    base.OnAfterLabelEdit(e);

    TreeNode node = e.Node;

    if (PassesSomeValidation(e.Label))
    {
        MyDataNode dataNode = node.Tag as MyDataNode;
        dataNode.SomeBoundValue = e.Label;

        int oldIndex = node.Index;
        int newIndex = RepositionChangedDataNode(dataNode);

        TreeNode parent = node.Parent;
        parent.Nodes.RemoveAt(oldIndex);
        parent.Nodes.Insert(newIndex, node);
    }
    else
    {
        e.CancelEdit = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

RepositionChangedDataNode()重新排序数据并返回更改节点在排序后移动到的索引.我希望我可以简单地移动已编辑的节点以反映此移动.

问题是这会导致节点保持编辑模式!我试过调用EndEdit(),在插入节点之前克隆节点,设置LabelEdit为false并返回true,将更改包含在BeginUpdate()/中EndUpdate(),以及这些想法的各种组合,但它们都没有任何效果.

罪魁祸首似乎是插入.即使我尝试插入一个全新的节点,它也会立即进入编辑模式.

那么,有没有办法让TreeView这种方式表现得不那么好?如果没有,是否有一个很好的解决方法?

我考虑过的一些想法:

  1. 设置自定义TreeViewNodeSorter.但是,我不想两次排序我的数据.
  2. 设置一个标志并将删除插入步骤延迟到AfterLabelEdit之后的某个点.它可以在WndProc期间完成它,但这感觉就像一个可能以某种方式失败的大型kludge.
  3. 使用BeginInvoke()推移除嵌件的步骤返回到像这样的消息队列:

    BeginInvoke(new MethodInvoker(delegate( …
    Run Code Online (Sandbox Code Playgroud)

c# treeview .net-2.0 winforms

5
推荐指数
1
解决办法
2055
查看次数

标签 统计

c# ×2

winforms ×2

.net ×1

.net-2.0 ×1

database ×1

icons ×1

indexing ×1

rdbms-agnostic ×1

sql ×1

sqlite ×1

treeview ×1