我说,如图所示:

如果不存在,如何动态创建它?
我正在寻找排序RichTextBox行的最佳方法,我现在正在使用它:
public void SortLines(object sender, EventArgs e)
{
TextPointer pStart = TextInput.Document.ContentStart;
TextPointer pEnd = TextInput.Document.ContentEnd;
TextRange text = new TextRange(pStart, pEnd);
string[] lines = text.Text.Split('\n');
Array.Sort(lines);
text.Text = String.Join(String.Empty, lines);
}
Run Code Online (Sandbox Code Playgroud)
有最佳方法吗?
当我调用它时,光标放在第一个RichTextBox行中,我该如何将它放在以前的位置?我尝试设置pStart/pEnd和CaretPositiom,但属性是只读的.
我希望这很清楚.提前致谢.
在C#.NET中,我可以使用List<myclasstype> vals = new List<myclasstype> ();它在C中可能相同吗?
我有一个像这样的结构:
typedef struct foo {
int x;
int y;
} Baa;
Run Code Online (Sandbox Code Playgroud)
我想要做:
**BAA vals = ??
int i ;
for(i = 0; i < size; i++)
{
vals[i].x = i;
vals[i].y = i * 10;
}
Run Code Online (Sandbox Code Playgroud)
我希望这对你来说很清楚.提前致谢.
有一种更有效的方法可以从字符串中删除重音而不用一个大数组来替换字符吗?
例如:
removeaccents("áèfoo")
Run Code Online (Sandbox Code Playgroud)
输出:
aefoo
Run Code Online (Sandbox Code Playgroud)
在ASCII表中没有重音符号,我不知道怎么做.提前致谢.:)
我正在使用fpc编译器,并且想删除此警告。我已经阅读了fpc的选项,但找不到该怎么做。这可能吗?它在我运行命令时出现:
fpc foo.pas
Run Code Online (Sandbox Code Playgroud)
出:
目标操作系统:Linux for i386编译foo.pas链接p2 / usr / bin / ld:警告:link.res包含输出节;你忘了-T吗?汇编79行,0.1秒
std.conv.to!string(enum.member)工作怎么样?一个函数如何获取枚举成员并返回其名称?它是使用编译器扩展还是类似的东西?自从我来自C/C++世界以来,这对我来说有点平常.
对于一个错字,我a留在那里.当我去编译时,编译器报告:
'a'和'f'的声明之间缺少','
码:
int a
f(void)
{
}
Run Code Online (Sandbox Code Playgroud)
因为我从来没有得到任何这样的错误信息,而且我不知道我可以在那里放一个逗号并且它编译得很好(在我测试的多个编译器中),这是非常令人惊讶的:
int a,
f(void)
{
}
Run Code Online (Sandbox Code Playgroud)
但当然这不是我的意图,而是int f(void){}代替.我尝试了另一个编译器,但它没有用,并报告了这样的语法错误(在clang中):
错误:预期';' 在顶级声明者之后.
我的问题是:哪一个是正确的?它应该或不应该编译?标准对这种行为有什么看法?
我不打算使用它,因为把变量和函数分成逗号有点难看(就像它是函数原型一样).我只是好奇.
编辑:添加void在函数参数中.其实我想用空参数写一个函数
我想等到计时器完成然后从函数返回.我试过这个:
while(timer1.Enabled)
{
Application.DoEvents();
}
return value;
Run Code Online (Sandbox Code Playgroud)
但它没有工作,函数在计时器真正完成之前返回.这是完整的功能:
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
int[] foo()
{
do_something1();
int[] some_value;
timer1.Interval = 1000;
timer1.Tick += new EventHandler(delegate(object o, EventArgs ea)
{
if (browser.ReadyState == WebBrowserReadyState.Complete)
{
timer1.Stop();
baa(some_value);
}
});
timer1.Start();
while (timer1.Enabled)
{
Application.DoEvents();
}
return some_value;
}
Run Code Online (Sandbox Code Playgroud) 我需要生成n个随机字符串,这个过程可能需要一段时间并阻塞主线程UI.为避免这种情况,让用户在进程运行时使用该程序,我决定使用a backGroundWorker.但它不能很好地工作,主线程仍然被阻止.在我的DoWork活动中我有这样的事情:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// using Invoke because I change value of some controls, e.g, ListView, labels and a progressbar
this.Invoke((Action)delegate
{
for (int i = 0; i < nSteps; ++i)
{
string s = getnStr();
// ...
int progress = (int)(100.0 / nSteps * (i + 1));
backgroundWorker1.ReportProgress(progress);
}
});
}
Run Code Online (Sandbox Code Playgroud)
即使我ReportProgress()在循环内部调用,但进度条仅在循环完成时更改其值.
为什么会发生这种情况?我该如何解决这个问题?
如何预先获取类名的长度,以便可以将其传递给函数中的nMaxCount参数GetClassName()?诸如WM_GETTEXTLENGTH控件中存在的消息之类的信息,还是窗口类名称是否定义了固定的大小限制?如果是这样,那有什么价值?
我的目标是传递确切的大小,而不要使用重新分配方法(调用GetClassName()直到返回的大小小于其缓冲区)。
我当前的实现(没有重新分配方法):
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
string GetWindowClass(IntPtr hWnd)
{
const int size = 256;
StringBuilder buffer = new StringBuilder(size + 1);
if (GetClassName(hWnd, buffer, size) == 0)
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
return buffer.ToString();
}
Run Code Online (Sandbox Code Playgroud)