C#字符串属性和字符串文字连接问题

C#字符串属性和字符串文字连接问题,c#,C#,我对C#有点陌生,我遇到了一个字符串连接问题。我希望有人能给我一个提示,帮助我解决这个问题。我已经广泛搜索了谷歌,并为此花费了一个多星期的时间,因此任何帮助/建议都将不胜感激 我已经为字符串属性创建了自定义路径编辑器。该属性基本上允许用户输入一个要在应用程序中使用的文件。如果键入的文件是正确的,它将按应有的方式显示在属性单元格中。如果键入的文件不存在,我尝试向属性单元格输出一条错误消息-我在我的文件验证程序中对此进行检查。这里是字符串文字问题 如果我使用: return inputFile+"E

我对C#有点陌生,我遇到了一个字符串连接问题。我希望有人能给我一个提示,帮助我解决这个问题。我已经广泛搜索了谷歌,并为此花费了一个多星期的时间,因此任何帮助/建议都将不胜感激

我已经为字符串属性创建了自定义路径编辑器。该属性基本上允许用户输入一个要在应用程序中使用的文件。如果键入的文件是正确的,它将按应有的方式显示在属性单元格中。如果键入的文件不存在,我尝试向属性单元格输出一条错误消息-我在我的文件验证程序中对此进行检查。这里是字符串文字问题

如果我使用:

return inputFile+"Error_";
return "Error_"+inputFile;
这工作正常,我在属性网格单元中得到outpur file123.txtError

如果我使用:

return inputFile+"Error_";
return "Error_"+inputFile;
我只得到输入文件,没有文字“Error\ux”。因此,属性网格单元格在属性网格单元格中显示file123.txt

我已经检查并输入文件是字符串类型。你知道为什么会这样吗

还有,有没有办法更改消息输出的字体和/或颜色?我试图更改属性网格单元的背景,我知道这是不可能的

多谢各位。 Z

更多代码:

[
Description("Enter or select the wave file. If no extension, or a non .wav extension, is specified, the default extension .wav will be added to the filename."),
GridCategory("Sound"),
Gui.Design.DisplayName ("Input Sound"),
PathEditor.OfdParamsAttribute("Wave files (*.wav)|*.wav", "Select Audio File"),
Editor(typeof(PathEditor), typeof(System.Drawing.Design.UITypeEditor))
]
public string InputWavefile
{
    get { return System.IO.Path.GetFileName(inputtWavefile); }
    set 
    {
        if (value != inputWavefile)  // inputWavefile has been changed
        {                           
            // validate the input stringg
             _inputWavefile = FileValidation.ValidateFile(value);

            // assign validated value
            inputWavefile = _inputWavefile;
       }
    }
}
我猜您在
inputFile
的开头有一个古怪的字符,这让人很困惑-尝试在调试器中使用
inputFile.tocharray()
查看它以获得一个字符数组


字符串连接本身应该是好的-这是如何解释值的问题,我怀疑…

假设这是winforms应用程序中的
PropertyGrid
。这既不是字符串连接问题,也不是
PropertyGrid
问题,下面的代码片段可以证明这一点。因此,您需要查看代码中的其他地方:

public partial class Form1 : Form { PropertyGrid pg; public Form1() { pg = new PropertyGrid(); pg.Dock = DockStyle.Fill; this.Controls.Add(pg); var inputFile = "some fileName.txt"; var obj = new Obj(); obj.One = "Error_" + inputFile; obj.Two = inputFile + "Error_"; pg.SelectedObject = obj; } } class Obj { public string One { get; set; } public string Two { get; set; } } 公共部分类Form1:Form{ PropertyGrid pg; 公共表格1(){ pg=新属性网格(); pg.Dock=DockStyle.Fill; 此.Controls.Add(pg); var inputFile=“some fileName.txt”; var obj=新obj(); obj.One=“错误”+输入文件; obj.Two=输入文件+“错误”; pg.SelectedObject=obj; } } Obj类{ 公共字符串One{get;set;} 公共字符串二{get;set;} }
我猜您的文件名应该是这样的,C:\Folder\filename.txt

在FileValidation.ValidateFile()方法中

return "Error_" + InputFileName;
现在看起来是这样的:错误\u C:\Folder\FileName.txt。 所以,当你运行下面这行时

get { return System.IO.Path.GetFileName( _inputWavefile ); }
它去掉路径并仅返回文件名,filename.txt


即使文件名无效,您仍然可以在其上运行System.IO.Path.GetFileName()。

如果您需要更多的代码,我们将不胜感激。看着我所见所知,似乎不可能。除了一件可能导致问题的事情:网格单元格式。不知道是什么网格,但通常网格都有格式化的单元格:)谢谢您的输入。这里我指的是标准的Propertygrid。我有以下属性是什么类型将该单元格绑定到PropertyGrid中?@Zeos6,这是一个记忆问题吗?
\uu
字符可能导致
\u
后面的字符加下划线(并被视为热键)。有什么好玩的事吗?谢谢你的建议。我删除了uu字符,但仍然无法继续。这真是难住我了。我试过你建议的inputFile.tocharray,但我没有得到任何字符。输出是System.Char[],之后什么都没有,但inputFile仍然存在。Zeos6:我没有说要打印
inputFile.ToCharray()
-只需在调试器中检查它。你是对的……我不应该打印它。我将在调试器中进行检查。谢谢你指给我看。我搞砸了。对不起,我理解你的意思。奇怪的是string2+string1起作用,而string1+string2不起作用——在我的例子中。我将查看我的文件验证。您在这里所说的是正确的。我想你可能在这里发现了什么。我想可能就是这样。我怎样才能避开这件事呢。我仍然希望在没有完整路径信息的情况下显示InputFile.txt,但如果该文件不存在,我希望显示错误\u C:\Folder\InputFile.txt。将验证移出inputwavile setter。然后调用FileValidation.ValidateFile(InputWavefile);当您需要进行验证时。谢谢。我现在正在尝试。问题是getter剥离了错误部分。我重新设计了接球手和二传手,现在效果很好。非常感谢你们所有人!非常感谢。非常感谢。