小编sor*_*419的帖子

将Console.WriteLine()重定向到文本框

我正在使用C#在Visual Studio 2010中构建此应用程序.

基本上有2个文件,form1.cs(这是windows窗体)和program.cs(所有逻辑都在这里).

//form1.cs
public partial class Form1 : Form
{
    //runButton_click function
}

//program.cs
class Program
{
    static void Main()
    {
        while(blah-condition)
        {
            //some calculation
            Console.WriteLine("Progress " + percent + "% completed.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个运行按钮和一个空白文本框.

当用户点击"运行" 按钮时,program.cs将执行一些任务并使用Console.WriteLine()控制台(命令提示符)不断打印进度.

问题:如何打印到form1上的文本框而不是打印到命令提示符?我需要在没有任何用户操作的情况下持续打印进度.

提前致谢!

顺便说一句,它不必是文本框,它可以是标签或其他可以采用文本的东西.我选择了文本框,因为它对我来说更有意义.

c# user-interface redirect console.writeline

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

逃避正则表达式中的特殊角色

有没有办法[]()*从字符串中转义正则表达式中的特殊字符,例如和其他字符?

基本上,我要求用户输入一个字符串,我希望能够使用正则表达式在数据库中搜索.我遇到的一些问题是too many)'s[x-y] range in reverse order等等.

所以我想要做的是编写一个函数来替换用户输入.例如,替换(\(,替换[\[

是否有正则表达式的内置函数?如果我必须从头开始编写函数,是否有办法轻松地对所有字符进行编码而不是逐个编写替换语句?

我正在使用Visual Studio 2010在C#中编写程序

c# regex escaping

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

Directory.Move():拒绝访问路径

我正在使用C#在Visual Studio 2010中编写此Windows窗体应用程序.

表单上有一个Execute按钮,用户将点击按钮,程序将生成一些文件并存储在Output文件夹中(由程序使用创建Directory.CreateDirectory())

我想创建一个Archive文件夹来保存以前运行的输出文件.

在每次运行开始时,我尝试将现有Output文件夹移动到该Archive文件夹,然后创建一个新Output文件夹.下面是我运行移动目录的功能.

static void moveToArchive()
{
    if (!Directory.Exists("Archive")) Directory.CreateDirectory("Archive");
    string timestamp = DateTime.Now.ToString("yyyyMMddHHmms");
    try
    {
        Directory.Move("Output", "Archive\\" + timestamp);
    }
    catch(Exception e)
    {
        Console.WriteLine("Can not move folder: " + e.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题让我很困惑......

有时我可以成功地将Output文件夹移动到存档,但有时它会失败.

我从捕获异常中获得的错误消息是 Access to path 'Output' is denied.

我检查过文件Output夹中的所有文件都没有被使用.我不明白访问权限有时被拒绝,而不是所有时间都被拒绝.

有人可以向我解释并告诉我如何解决问题吗?

- 编辑 -

在HansPassant评论之后,我稍微修改了一下这个函数来获取当前目录并使用完整路径.但是,我仍然遇到同样的问题.

该功能现在看起来像这样:

static void moveToArchive()
{
    string currentDir = Environment.CurrentDirectory;
    Console.WriteLine("Current Directory = " + currentDir);
    if (!Directory.Exists(currentDir …
Run Code Online (Sandbox Code Playgroud)

c# directory exception-handling access-denied

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

将List <string>传递给SQL参数

该程序在C#中,我正在尝试传递List<string>一个参数.

List<string> names = new List<string>{"john", "brian", "robert"};
Run Code Online (Sandbox Code Playgroud)

在纯SQL中,查询将如下所示:

DELETE FROM Students
WHERE name = 'john' or name = 'brian' or name = 'robert'
Run Code Online (Sandbox Code Playgroud)

在C#代码中运行SQL命令时,我知道正确的方法是使用参数而不是将所有内容连接成一个巨大的字符串.

command.CommmandText = "DELETE FROM Students WHERE name = @name";
command.Parameters.Add(new MySqlParameter("@name", String.Format("'{0}'", String.Join("' or name = '", names)));
command.NonQuery();
Run Code Online (Sandbox Code Playgroud)

上述方法不起作用.它没有抛出任何错误/异常,它只是根本不按我想要的方式工作.

我应该怎么做呢?

我想过循环遍历List<string>并只执行每一个名字.

foreach(string name in names)
{
    command.CommmandText = "DELETE FROM Students WHERE name = @name";
    command.Parameters.Add(new MySqlParameter("@name", name));
    command.NonQuery();
    command.Parameters.Clear();
}
Run Code Online (Sandbox Code Playgroud)

但这需要很长时间,因为实际List<string>情况非常大.我想尝试尽可能少地执行.

谢谢!

c# mysql parameters

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

使用超时从url下载文件

我正在使用C#.Net在Visual Studio 2010中编写程序

该程序是将文件从给定的URL保存到本地驱动器,具有自定义超时以节省时间.

说网址是http://mywebsite.com/file1.pdf,我想将文件保存到目录中C:\downloadFiles\

目前,我正在使用WebClient.

WebClient.DownloadFile("http://mywebsite.com/file1.pdf", "C:\downloadFiles\file1.pdf");
Run Code Online (Sandbox Code Playgroud)

我能够保存文件,但我遇到了一些问题.

有时,网址只是不响应,所以我让我的程序在终止之前尝试下载5次.然后我意识到WebClient的默认超时对我的需求来说太长了(比如2分钟或者什么)有没有一种简单的方法来设置超时,比如15秒?

我也调查过HttpWebRequest,我可以轻松设置超时HttpWebRequest.Timeout = 15000;.但是,使用这种方法,我不知道如何下载/保存文件.

所以我的所有问题都是:哪个更简单,设置超时WebClient或保存文件HttpWebRequest?我该怎么做呢?

.net c# webclient httpwebrequest

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

SqlCommand参数与String.Format

我一直在互联网上搜索,但我似乎无法找到解释我的问题的任何东西(可能是我没有使用正确的搜索字符串),所以我发帖在这里希望有人可以帮助我有了这个.(我的程序是使用Visual Studio 2010编写的C#)

我注意到在C#中,有多种构造SQL命令的方法.

SqlConnection connection = GetAndOpenConnection(); //function containing connection string and open connection
SqlCommand command = connection.CreateCommand();
Run Code Online (Sandbox Code Playgroud)

到目前为止,我没有任何问题.我遇到的问题是CommandText.我在我的代码中使用了几个不同的命令(SELECT/ INSERT/ UPDATE/ DELETE),但SELECT举个例子.

//Example 1:
command.CommandText = String.Format("SELECT * FROM myTable WHERE name = '{0}'", "bob");

//Example 2:
command.CommandText = "SELECT * FROM myTable WHERE name = @myName";
command.Parameters.Add(new SqlParameter("myName", "bob"));
Run Code Online (Sandbox Code Playgroud)

上面两个例子之间有什么区别?(表现明智/结构明智/等)

我问的原因是因为在同一个.cs文件中,当我使用示例2中的方法时,有时候代码正常工作而有时它没有,那么我最终会像示例1中那样生成所有内容,每个单独工作时间.

使用任何一种方法都有显着的收益/损失吗?完成这样的任务的更合适的方法是什么?

其他问题

好的,所以我看到方法2是更合适的方法.

但是,如果我使用方法2则会出现问题.

我有一个循环循环通过List<string> names.在循环内部,当我使用方法2并添加名称作为参数时,我得到一个错误,说该参数已经存在且无法添加.

我怎样才能解决这个问题?

List<string> names = new List<string> {"adam", "bob", "john"};
foreach(string …
Run Code Online (Sandbox Code Playgroud)

c# sql parameters command

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

有没有办法在 C# 中设置可供不同类和函数访问的变量?

我正在使用 C# 在 Visual Studio 2010 中创建一个项目。

我的 main ( program.cs) 和几个不同的类位于不同的文件 ( class1.cs class2.cs class3.cs) 中,每个类都有自己的功能。

program.cs我想知道是否有一种方法可以设置可以从每个不同的类文件访问的变量(例如在 中)?

为了减少混乱,我将通过示例进行解释。

program.cs是创建文件。每个类都会创建不同类型的文件(txt、xml、xls 等)。我想指定保存文件的路径program.cs,所以如果我想更改路径,只需更改一处即可。

我想设置一个可从每个类文件访问的变量,而不是将“路径”变量传递到函数中。

有办法这样做吗?

c# variables class function visual-studio-2010

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

如何从表单上的用户控件获取数据

我正在使用C#在Visual Studio 2010中构建一个简单的应用程序,我这样做是为了熟悉用户控件,因为它似乎比创建多个表单更容易.

在主窗体上,有一个下拉列表,其中包含2个值" UCType1"和" UCType2".我创建了2个不同的用户控件.我在主窗体上使用面板根据他们在下拉列表中选择的内容显示用户控件.

我能够根据用户选择显示适当的用户控件,但现在我遇到了一些问题.我无法获取主窗体从用户控件中读取数据.

假设主窗体上有一个按钮" Execute"和一个标签" Warning".Name用户控件上有一个文本框" ".

方案是:当用户点击" Execute"时,如果" Name"为空," Warning"将显示一些错误消息.

我试图if(UserControl1.Name.Text == "")在主表单上使用,但我甚至无法像那样引用它.

我知道我可以创建单独的表单以使其更容易,因为这将使所有变量在同一个文件中,但我想知道是否有办法用户控制,因为我想熟悉它.

谢谢

这就是我显示用户控件的方式

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    UCType1 uc1 = new UCType1();
    panel1.Controls.Clear();
    panel1.Controls.Add(uc1);
}
Run Code Online (Sandbox Code Playgroud)

当我试图显示来自用户控件的数据时

private void executeButton_Click(object sender, EventArgs e)
{
    UCType1 uc1 = new UCType1();
    warning.Text = uc1.Name;
}
Run Code Online (Sandbox Code Playgroud)

一切都没发生.

c# forms user-controls

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

比较两个词典中的键

我正在尝试比较两个词典,该程序是用C#Visual Studio 2010编写的.

Dictionary<int, string> members1 = new Dictionaries<int, string>{
    {1, "adam"},
    {2, "bob"},
    {3, "cameron"}
}

Dictionary<int, string> members2 = new Dictionaries<int, string>{
    {1, "adam"},
    {2, "bill"},
    {4, "dave"}
}
Run Code Online (Sandbox Code Playgroud)

我想找到相同的id(密钥),并且名称(值)是否相同无关紧要.

我一直在寻找,发现IntersectExcept,但我不认为它工作得我想它的方式.

通过上面的例子,如果我调用一个Intersect函数,我希望它返回List<int>{1, 2}.

如果我打电话members1.Except(members2),我希望它回来

Dictionary<int, string> intersectMembers{
    {1, "adam"},
}
Run Code Online (Sandbox Code Playgroud)

我想做的解决方案是编写2个for循环并使用dictionary.Contains(key)来获得我想要的结果.

有没有更直接的方式这样做?

谢谢

c# dictionary compare except intersect

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

将文件嵌入可执行文件

我正在尝试构建一个简单的程序,并且想找到一种在可执行文件中嵌入一个文件(或多个文件)的方法。

该程序非常简单。我将在 Visual Studio 中使用 C# 构建一个表单。表格上会有几个问题和一个提交按钮。

一旦用户回答了所有问题并点击提交按钮,如果所有答案都正确,我想向用户提供该文件作为奖励。(该文件可以是图像、视频或包含多个其他文件的 zip 文件)

我想给用户提供文件的方式非常灵活。它可以只是在与可执行文件相同的目录中创建此文件,或者为用户提供下载选项以将其保存在其他位置。

下面是伪代码

private void submit_Click(object sender, EventArgs e)
{
    //functions to check all answers
    if(all answers are correct)
    {
        label.Text = "Congrats! You answered all questions correctly";

        //create the file that was embeded into the same directory as the executable
        //let's call the file 'prize.img' 

        Process.Start("prize.img");
    }
    else
        label.Text = "Some answers were not correct";
}
Run Code Online (Sandbox Code Playgroud)

逻辑非常简单且直接。问题是,如何将“ prize.img”嵌入到可执行文件中?我将把这个程序(.exe)给一个朋友,这样他就没有任何来源,我也不能保证路径。

c# forms file embedded-resource

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

在Visual Studio中将GUI添加到现有代码

我在Visual Studio 2010中使用C#构建了一个应用程序,并且它已成功运行.假设代码文件名是program.cs

我想为应用程序构建一个简单的GUI,因此它比命令提示符更加用户友好.

最初,应用程序将在命令提示符中请求用户输入.我的目标是允许用户使用ComboBoxTextBox提供输入并点击执行按钮来启动程序.

我尝试了添加新项> Windows窗体,但是当我点击F5时,程序仍然在命令提示符下运行,看起来它只是忽略我刚刚创建的表单.当我注释掉整个program.cs文件并运行时,我得到一个错误,说没有" Main() "

我的问题是:实现目标的最佳/最简单方法什么?为了将表单链接到现有代码,我需要在代码中进行哪些更改?

另一个注意事项:目前用户可以将可执行文件运行到任何地方.完成上述目标后,我希望用户能够获取表单并在任何地方运行它.(我不确定可执行文件是否会运行表单而不是命令提示符,或者别的.我对此不太熟悉)

c# visual-studio-2010 winforms

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