有没有一种方法在.NET中我可以对我的集合进行排序,当我不知道运行时什么类型的对象我会传递给这个集合,也避免反射.
有什么想法吗?
我在C#Win App中使用旧的ActiveX控件.它有一个MouseUp事件,它的eventArgs传递我们点击的点的X和Y但是对于我的场景我使用它的ItemClick事件并且它的eventArgs没有关于X和Y的信息.但是我需要知道它们显示我的弹出窗口...所以有一种方法可以找出用户右键单击的X和Y的位置,这样我就可以将它传递给我的contextMenuStrip.Show方法.
谢谢
C#WinForms:如果无论垂直滚动条在哪里,都希望在面板上放置控件的位置,应该使用什么?我的意思是表格很大,所以我们使用滚动条上下移动,现在我希望该位置与我设置滚动条this.PointToClinet的位置无关。
我知道装箱/拆箱会影响性能.根据MSDN,拆箱可能需要四倍的时间.我们的代码中有许多行具有"冗余"强制转换.实际上并不需要它们,如果没有它们,代码就可以很好地编译.可能它不会损害性能,因为编译器发现不需要进行拆箱,但也许不行!也许当我们强制转换时,编译器将被迫进行不必要的拆箱.我想知道那种类型的"冗余铸造"是否也会影响性能,就像拆箱或者nop一样?
我有这样的列表视图,在FormLoad事件中,我应该为它做一些初始化,如:(我需要这些).
listView.Scrollable = true;
listView.HideSelection = false;
listView.FullRowSelect = true;
listView.View = View.Details;
listView.HeaderStyle = ColumnHeaderStyle.None;
ColumnHeader header = new ColumnHeader();
header.Text = "MyHdr";
header.Name = "MyCol";
header.Width = listView.ClientSize.Width;
listView.Columns.Add(header);
Run Code Online (Sandbox Code Playgroud)
我添加项目的方式非常简单:
listView.Items.Add("hello");
listView.Items.Add("How are you");
//... etc
Run Code Online (Sandbox Code Playgroud)
但是我希望它们按字母顺序添加和排序,但是当我向它添加一个新项目并调用Sort方法时,它什么都不做.为什么?!:(
编辑:这是我在调用最后一行的整个部分Sort()目标是有两个列表视图和一个移动按钮,当单击"移动"按钮时,一个列表视图中的选定项应该移动到另一个列表视图.(两个列表视图都不需要排序.只需对AvailLV列表视图进行排序)
private void MoveBtn_Click(object sender, EventArgs e)
{
ListView source=null;
ListView target= null;
if(AvailableLV.SelectedItems.Count>0)
{
source = AvailableLV;
target = SelectedLV;
}
if(SelectedLV.SelectedItems.Count>0)
{
source = SelectedLV;
target = AvailableLV;
}
if (source != null && target != null)
{ …Run Code Online (Sandbox Code Playgroud) 我在表单的底部有一个网格控件,如果用户想显示/隐藏它,则可以显示或隐藏它。因此,一种方法是很好地使用表单的AutoSize并将该网格的Visuble属性更改为true或false,但是,我想让它变得更酷!所以我希望表格像车库门一样缓慢地调整大小!所以我在计时器上放了一个Timer并开始一点一点地增加计时器的高度...
所以当用户说显示/隐藏网格时,是这样的:
timer1.Enabled = true;
timer1.Start();
Run Code Online (Sandbox Code Playgroud)
在timer_click事件中是这样的:
this.Height = this.Height + 5;
if(this.Height -10 > ErrorsGrid.Bottom )
timer1.Stop();
Run Code Online (Sandbox Code Playgroud)
有点工作,但仍然不完美。例如,它在一开始就滞后,停止调整大小,然后再次调整大小...因此,现在考虑到这个想法,您建议我做些什么更改以使此外观和效果更好?
有没有办法覆盖Combobx的Add()方法?
我问这个的原因是我想将类对象添加到我的combbox但是为了显示我希望它显示我的对象的名称.
例如: combbox.Items.Add(myClassObject)
但是我们在combbobx中实际看到的用户将显示为 myClassObject.Name
像这样的东西:
大会(A):
private void MoveItems(someCollection)
{
// more code....
foreach( item x in someCollection)
{
int x = getXFoo();
assemblyB.UpdateOrderView(x)
}
//more code....
}
Run Code Online (Sandbox Code Playgroud)
组件(B):
private void UpdateOrderView(x)
{
// more code....
int y = this.ListCount();
//......
FinishDisplay(y)
}
Run Code Online (Sandbox Code Playgroud)
我们调用MoveItems()哪个集合和for-each循环.因此,如果集合中有600个项目,我们调用FinishDisplay()方法也是600次.但这就是我需要重构的地方.我不需要FinishDisplay()每次为集合中的每个项目调用.如果我可以在最后调用一次,那就足够了.
所以我正在寻找一种重构此代码的方法,以便FinishDiplay()只调用一次.我控制了源代码,所以如果我需要公开某些方法或者创建一些方法的重载,我也可以这样做.
在我的SQL Server中的一个表上,在Indexes文件夹中,我有一个由该表的三列组成的聚簇索引,但是Unique当我转到该索引的属性窗口时,还有一个复选框.我的问题是T-SQL命令如何告诉它删除唯一性部分并仍然保留索引?它甚至可能吗?
如果我将for-each循环传入方法参数,如果我将该参数作为一个IEnumerable或者如果我将该参数作为一个传递,那么是否有任何好处或差别List?
c# ×9
winforms ×4
performance ×2
boxing ×1
collections ×1
contextmenu ×1
location ×1
refactoring ×1
sql ×1
sql-server ×1
t-sql ×1
windows ×1