- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 ObjectListView
库中的 TreeListView
组件。我将单元格值设置为可编辑,当我双击它们时,TextBox
将以奇数偏移量出现。我想删除这个偏移量,但是如何呢?
如您所见,第一行第二列(“我的新设备”)TextBox
出现了偏移。
附言编辑工作按预期进行。只有偏移让我很烦
最佳答案
经过长时间的搜索,我找到了解决方案!
OLV源码,ObjectListView.cs
public virtual void StartCellEdit(OLVListItem item, int subItemIndex) {
OLVColumn column = this.GetColumn(subItemIndex);
Control c = this.GetCellEditor(item, subItemIndex);
Rectangle cellBounds = this.CalculateCellBounds(item, subItemIndex);
c.Bounds = this.CalculateCellEditorBounds(item, subItemIndex, c.PreferredSize);
// Try to align the control as the column is aligned. Not all controls support this property
Munger.PutProperty(c, "TextAlign", column.TextAlign);
// Give the control the value from the model
this.SetControlValue(c, column.GetValue(item.RowObject), column.GetStringValue(item.RowObject));
// Give the outside world the chance to munge with the process
this.CellEditEventArgs = new CellEditEventArgs(column, c, cellBounds, item, subItemIndex);
this.OnCellEditStarting(this.CellEditEventArgs);
if (this.CellEditEventArgs.Cancel)
return;
// The event handler may have completely changed the control, so we need to remember it
this.cellEditor = this.CellEditEventArgs.Control;
this.Invalidate();
this.Controls.Add(this.cellEditor);
this.ConfigureControl();
this.PauseAnimations(true);
}
我看到 CellEditEventArgs
包含 Control
,它绘制在名为 Bounds
的区域中。
源文件中的这个函数将偏移量附加到控件的边界:
protected Rectangle CalculateCellEditorBoundsStandard(OLVListItem item, int subItemIndex, Rectangle cellBounds, Size preferredSize) {
if (this.View == View.Tile)
return cellBounds;
// Center the editor vertically
if (cellBounds.Height != preferredSize.Height)
cellBounds.Y += (cellBounds.Height - preferredSize.Height) / 2;
// Only Details view needs more processing
if (this.View != View.Details)
return cellBounds;
// Allow for image (if there is one).
int offset = 0;
object imageSelector = null;
if (subItemIndex == 0)
imageSelector = item.ImageSelector;
else {
// We only check for subitem images if we are owner drawn or showing subitem images
if (this.OwnerDraw || this.ShowImagesOnSubItems)
imageSelector = item.GetSubItem(subItemIndex).ImageSelector;
}
if (this.GetActualImageIndex(imageSelector) != -1) {
offset += this.SmallImageSize.Width + 2;
}
// Allow for checkbox
if (this.CheckBoxes && this.StateImageList != null && subItemIndex == 0) {
offset += this.StateImageList.ImageSize.Width + 2;
}
// Allow for indent (first column only)
if (subItemIndex == 0 && item.IndentCount > 0) {
offset += (this.SmallImageSize.Width * item.IndentCount);
}
// Do the adjustment
if (offset > 0) {
cellBounds.X += offset;
cellBounds.Width -= offset;
}
return cellBounds;
}
我们可以看到,偏移量附加到每个单元格(不仅是第一个)。我们还可以看到,CellEditEventArgs
包含 CellBounds
。
所以我们可以将 Control.Bounds
重置为 CellBounds
值:
//...
dataTreeView.CellEditStarting += DisableInputValueForCollections;
//...
private static void DisableInputValueForCollections(object sender, CellEditEventArgs e)
{
RemoveExtraOffsetForNotFirstColumnInputControl(e);
var node = e.RowObject as DataTreeNode;
if (node != null && e.Column.AspectName == "Value")
{
if (node.IsContainer()) e.Cancel = true;
}
}
//...
private static void RemoveExtraOffsetForNotFirstColumnInputControl(CellEditEventArgs e)
{
if (e.Column.AspectName != "Name")
{
e.Control.Bounds = e.CellBounds;
}
}
//...
关于C# objectlistview 在单元格编辑器中 undefined offset ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363661/
我在演示项目中尝试了演示代码,但无法成功添加新项目。它只是添加新的 NULL 组和 NULL 项。请给我一个简单的示例代码来添加新项目(文本和图像)。 谢谢! 哦,对不起!我忘了。这是我第一次参与这个
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我有一个应用程序,其中我 向 ListView 添加数千个项目 .此操作可能需要一段时间,但这对应用程序来说没问题。但是,我仍然希望在填充列表时运行一个选取框进度条,以便用户可以看到正在发生的事情。
我正在使用 ObjectListview。 我启用了 usesubitemcheckbox。但问题是,当我单击子项中的复选框时,复选框不会更改状态。 最佳答案 我最好的猜测是没有分配 bool 方面。
当我使用 objectListViewInstance.Items.Clear() 删除 Items 时,Objects 将作为 Items 在视觉上消失>,但它们仍在 objectListViewI
我有一个带有一些选项卡的 ObjectListView,其中一个是作业编号。此作业编号选项卡从数据库中获取作业编号,并在每个作业编号旁边显示一个复选框。我的要求是我想在该作业编号选项卡上添加一个复选框
我使用 ObjectListView 而不是标准 ListView 是因为我想对列进行自动换行。 我在几个地方读到,为了启用自动换行,我唯一需要做的就是将 column.wordWrap 设置为 tr
我目前正在尝试使用 TreeListView,我想知道如何找到三层嵌套对象的值,其中层是位置,然后是系统,然后是设备。 private void initObjectListView() {
我正在运行 Python 2.7,并且我有一个显示大量人口统计信息的 ObjectListView。我可以让它正确排序,但输出显示为 100000.0 格式。当我使用 locale 模块将整数转换为字
我正在尝试从 ObjectListView 组件搜索和过滤 TreeListView 对象的结果。目前,我正在将其实现到具有以下类的 C# (.NET 4.0) 项目中 MyAbstract、MyDi
我有一个 ObjectListView它本质上是标准 .NET ListView 的包装器。我的问题是我无法弄清楚向控件添加新对象、滚动控件以确保对象可见以及选择对象的方法调用的正确顺序。下面是我实现
我的程序提取 Windows 更新,检测版本号并将它们记录到 ListView 中的列(KB,版本),但我试图将其更改为 ObjectListView所以我可以对列进行排序。我终其一生都无法弄清楚如何
我有一个可编辑的 ObjectListView self.TrackOlv.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK 这给了我两个奇怪的问题
我正在尝试对 ObjectListView 实现通过拖放重新排序的功能。考虑以下类: public class MyClass { public string Name { get; set;
尝试将图标放入 ObjectListview,这是我应该放置图标的代码: objectListView1.SmallImageList = imageList1; deleteColu
我想更改组标题的名称,但我无法在文档或谷歌上找到任何解决方案。 标题中的文本应该是在组中汇总的时间。 它应该是这样的: 最佳答案 the text in the header should be a
我需要类似 ObjectListView 的东西( http://objectlistview.sourceforge.net/cs/index.html ),但它必须是免费的,并且必须是 LGPL、
我尝试将 TextMatchFilter 用于我的 ObjectListView。 我不知道为什么,但不是 Filterung(我想要的),该功能只突出显示单词。 所以我希望整个 ObjectList
我有一个更新 ObjectListView 的列表,它以前可以工作,但在解决另一个问题时,我以某种方式破坏了它,但现在无法弄清楚为什么它不工作。 当程序解析目录时,它应该使用找到的 .mp3 文件的信
谁能告诉我如何在 ObjectListView 中保持选择? 我有一个从数据库接收到的对象列表在我的控制之下。用户选择一个然后点击“刷新”(以便再次从数据库中检索所有项目)。选择是“跳跃”的,但我希望
我是一名优秀的程序员,十分优秀!