通过阅读类似的帖子,我了解到List是一种IEnumerable.但我真的很想知道这两者之间的实际区别是什么.
对于总是使用List并且从未使用IEnumerable的人:
这是一个实际的例子:我们想要存储四个字符串,按字母顺序排序,将它们传递给另一个函数,然后向用户显示结果.我们会用什么?为什么?
希望有人可以为我排序或指出我正确的方向.提前致谢!
我正在尝试在调用时设置表单的位置.Show().问题是,因为我使用.Show而不是.ShowDialogStartPosition值不起作用.我不能使用.Showdialog因为我希望程序在显示表单时在后台工作.
当我创建表单时,我将其位置设置为固定值:
using (ConnectingForm CF = new ConnectingForm())
{
CF.Show();
CF.Location = new Point(this.ClientSize.Width / 2, this.ClientSize.Height / 2);
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行代码时,每次启动时,表单都会将其置于不同的位置.
有解决方案吗 (我的代码永远不会在其他地方设置该位置)
我有一个标签AutoEllipsis = true和TextAlign = ContentAlignment.MiddleLeft.当我输入不扩展标签宽度的文本时,文本垂直对齐到标签的中间.

但是,当文本扩展标签宽度时,文本不会与中间对齐,而是与顶部对齐.

为什么它会以这种方式运行,是否有办法使文本垂直居中对齐?
我正在尝试基于两个给定点和描述圆弧段的给定高度绘制弧.为了实现这一点,我将使用java.awt.Graphics中的以下方法.
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
Run Code Online (Sandbox Code Playgroud)
首先,我观察到x,y,width和height值描述了一个包含圆的矩形.
弧的中心是矩形的中心,其原点是(x,y),其大小由width和height参数指定.(http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html)
首先,我首先计算x,y,width和height值.下图描述了我将如何做到这一点.

第一张照片显示了我已经获得的价值.第一张照片中的弧线正是我想要绘制的.在图片二中,我计算了两点之间一条线的长度.我执行此步骤的代码如下所示:
int dx = p1.x- p2.x;
int dy = p1.y - p2.y;
double len = Math.sqrt(Math.pow((double)dx, 2) + Math.pow((double)dy, 2));
Run Code Online (Sandbox Code Playgroud)
如图3所示,我现在可以使用以下函数计算圆的半径.
radius = h/2 + len^2 / 8h
Run Code Online (Sandbox Code Playgroud)
我遇到的第一个问题是计算圆的中心点.这部分是我需要帮助的地方.
如果我要计算中心点,我可以很容易地找到x,y,whith和height坐标.
x = centerPoint.x - radius;
y = centerPoint.y - radius;
width = radius * 2;
height = radius * 2;
Run Code Online (Sandbox Code Playgroud)
最后一部分是根据我们已经计算过的值计算startAngle和arcAngle.
TL; DR我需要帮助计算角度和中心点.
提前致谢!
我创建了两个按钮,其中.Text属性包含我想要居中的字符,但我无法让它正常工作.目前按钮看起来像这样:

代码看起来像这样:
btnUp.Text = "?";
btnDown.Text = "?";
btnUp.TextAlign = ContentAlignment.MiddleCenter;
btnDown.TextAlign = ContentAlignment.MiddleCenter;
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是按钮的文本居中,因此箭头将完全位于控件的中间.我怎么做到这一点?
仔细看看为什么我不开心:

感谢Thomas Mondel的解决方案 以下是结果:

我注意到System.nanoTime()的模式。每次我开始迭代时,nanoTime()在连续几圈之前都会变得非常不正确,直到最终稳定下来。
例如,如果我运行以下代码:
public class TimeTest{
public static void main(String[] args) {
long prev = System.nanoTime();
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 1000000; j++);
long time = System.nanoTime();
System.out.println(time - prev);
prev = time;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:

为了消除System.out.println(String)弄乱结果的可能性,我还可以运行以下测试:
public class TimeTest{
public static void main(String[] args) {
long[] difs = new long[10];
long prev = System.nanoTime();
for(int i = 0; i < 10; i++) {
for(int j = 0; j < …Run Code Online (Sandbox Code Playgroud) 我正在尝试在课程中完成以下内容:
public void Test(var input)
{
WriteToFile(input.ToString());
}
private void WriteToFile(string input)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
但'var'语句不能在类中使用.所以我想知道最简单的方法是如何完成与上面相同的事情.
一种解决方案是为每种值类型创建一个函数,但这必然比必要的麻烦更多:
public void Test(string input)
{
WriteToFile(input);
}
public void Test(int input)
{
WriteToFile(input.ToString());
}
public void Test(double input)
{
WriteToFile(input.ToString());
}
private void WriteToFile(string input)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
编辑:当更多地考虑它时,我明白这不是我的问题的答案.我发布了一个有更多想法背后的新问题.我不会删除这个问题,因为其他人可能会觉得这个有用.
我有一个WriteList将列表保存到文件中的函数.此函数具有参数,List<Object>因此我可以将不同类型的列表作为参数传递.
public void WriteList(List<object> input, string ListName)
{
WriteToFile("List - " + ListName);
foreach (object temp in input)
{
WriteToFile(temp.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
从我的代码调用此函数时,我想传递参数List<Database>where Database我自己的类.我收到以下错误:
无法从'System.Collections.Generic.List -Database-'转换为'System.Collections.Generic.List-object-'
所以我的问题是如何将我自己的类转换为Object,然后将列表传递给我的函数.
在 SQL Server Management Studio 中,我创建一个新查询,然后运行以下代码:
select dbName.dbo.ScalarFunction()
union
select dbName2.dbo.ScalarFunction()
Run Code Online (Sandbox Code Playgroud)
然后我尝试在我的 C# 程序中做同样的事情。但是,我无法将上述内容转换为一个查询字符串。我尝试了以下方法,但没有成功:
string QueryString = @"select dbName.dbo.ScalarFunction() /r/n union /r/n select dbName2.dbo.ScalarFunction()"
Run Code Online (Sandbox Code Playgroud)
和
string QueryString = @"select dbName.dbo.ScalarFunction(); union; select dbName2.dbo.ScalarFunction();"
Run Code Online (Sandbox Code Playgroud)
和
string QueryString = @"select dbName.dbo.ScalarFunction(); union select dbName2.dbo.ScalarFunction();"
Run Code Online (Sandbox Code Playgroud)
我对 SQL 非常陌生,所以如果有人能帮助我使用正确的语法,我将非常高兴!提前致谢!
我想在我的MainForm正在进行一些与数据库相关的工作时显示带有Progressbar的新表单.我已经读过你不想将UI传递给新的线程,所以我想知道解决这个问题的最佳解决方案是什么?
我无法在另一个线程上执行与数据库相关的工作,因为它使用了对UI和MainForm的十几个调用.我也无法使用,Application.DoEvents()因为MainForm的线程在类中工作,据我所知,你不应该对类的父类进行任何调用.
任何建议,将不胜感激!
编辑
澄清我实际想知道的事情:
我的程序看起来有点像这样:
... Content = DatabaseClass.LoadContent();
ApplyContentToUI(Content);
Run Code Online (Sandbox Code Playgroud)
我想做的是以下内容:
//Show a form here with a progressbar
... Content = DatabaseClass.LoadContent();
ApplyContentToUI(Content);
//Close the form here
Run Code Online (Sandbox Code Playgroud)
但是,因为执行ApplyContentToUI的时间是aprox.1秒我决定做以下事情:
//Show a form here with a progressbar
... Content = DatabaseClass.LoadContent();
//Close the form here
ApplyContentToUI(Content);
Run Code Online (Sandbox Code Playgroud)
如果您和我不同,需要在重新加载UI时显示进度条,我建议您查看下面的注释和答案.
对于ListView我正在使用我自己的图像的列来显示排序是升序还是降序.当我设置column.ImageKey属性时,列的文本向右移动以为图像腾出空间.我遇到的问题是当我不再需要它时如何删除图像.通过设置column.ImageKey = ""和column.ImageIndex = -1我删除图像,但文本不在它的起始位置.所以基本上我只是重置了图像对象位图,但我没有删除图像对象本身.所以我想知道如何删除/禁用图像对象.