这种情况以前发生了很多次,但我从来没有费心去弄清楚原因,现在我已经厌倦了:
例如,我从RichTextBox或Panel派生一个类,我重建我的项目以将类添加到VS设计器工具箱,然后将自定义用户控件拖放到Form.一切正常,我可以运行我的项目......
当我通过设计器编辑窗体或自定义用户控件的属性时出现问题.有时,设计器会从其代码隐藏中删除初始化行,从而导致设计器和可执行文件中出现异常,因为控件仍然未初始化.
换句话说,从Form1.Designer.cs中删除以下行:
this.customRichTextBox1=new CustomRichTextBox();
Run Code Online (Sandbox Code Playgroud)
没有其他行从代码隐藏中删除,因此自定义控件的属性仍然设置,尽管变量保持未初始化.
我的解决方案一直是在设计器代码隐藏中手动初始化我的用户控件,但设计人员最终会再次删除它.
我相信当我通过设计器构建自定义用户控件时,这不会发生(但我不完全确定).它只发生在我手动定义类似下面的内容时:
class CustomRichTextBox:RichTextBox{}
Run Code Online (Sandbox Code Playgroud)
这太烦人了.我究竟做错了什么?
正如@Cody所要求的,以下是重现问题的步骤.我正在使用VS2010,但我认为自2005年以来我遇到了这个问题.
步骤1.创建新的Windows窗体应用程序,任何框架
步骤2.在主Form类下面添加以下类:(这恰好是这次导致我出现此问题的控件.)
class CustomRichTextBox : RichTextBox
{
Timer tt = new Timer();
internal CustomRichTextBox()
{
tt.Tick += new EventHandler(tt_Tick);
tt.Interval = 200;
}
protected override void OnTextChanged(EventArgs e)
{
tt.Stop();
tt.Start();
}
void tt_Tick(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine("Hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
步骤3.按F6重建.
步骤4.通过从工具箱中拖放,将CustomRichTextBox控件添加到窗体.
步骤5.如果您愿意,可以按F5测试应用程序,但它应该可以工作.关闭正在运行的应用
步骤6.按F6重建,此时,设计人员应该崩溃并显示以下消息:"变量'customRichTextBox1'未声明或从未分配过." (在一种情况下,整个VS完全崩溃,但错误通常包含在设计器中.)
步骤7.要解决问题,请进入代码隐藏并初始化变量,但下次重建时,初始化行将消失.
我一直用WPF DataGrids加载时间很长,我在网上找不到任何类似的报道,所以我怀疑我做错了什么.现在我很确定,因为添加布局复杂性会大大降低执行速度.在一个非常简单的布局中,DataGrid立即填充,而下面的代码大约需要3秒才能执行.
在以下代码中,加载150行和11列需要约3秒,即使每个单元格未绑定到任何属性且AutoGenerateColumns = False也是如此.(我有一个两核,2.6GHz处理器,有足够的RAM).
如果在布局中设置ItemsSource属性,则会发生瓶颈,如下所示:
<Window x:Class="datagridtest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Border Background="LightSteelBlue" CornerRadius="10" Margin="10">
<ScrollViewer Margin="10" HorizontalScrollBarVisibility="Auto">
<Grid Margin="10,50,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Expander IsExpanded="True" Name="expander1" Grid.Row="0">
<Grid>
<DataGrid VirtualizingStackPanel.IsVirtualizing="True" AutoGenerateColumns="false" Name="dg" Height="auto" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False">
<DataGrid.Columns>
<DataGridTextColumn >
<DataGridTextColumn.Header >
<TextBlock Width="140" HorizontalAlignment="Center" TextAlignment="Center">untitled<LineBreak/>column</TextBlock>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn >
<DataGridTextColumn.Header >
<TextBlock Width="140" HorizontalAlignment="Center" TextAlignment="Center">untitled<LineBreak/>column</TextBlock>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn >
<DataGridTextColumn.Header >
<TextBlock Width="140" HorizontalAlignment="Center" TextAlignment="Center">untitled<LineBreak/>column</TextBlock>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn > …
Run Code Online (Sandbox Code Playgroud) 我有一个Makefile规则,如下所示:
%.b : %.a
[run some commands...]
Run Code Online (Sandbox Code Playgroud)
我想重写我的Makefile,以便从%.a到%.b的所有转换都是通过单次执行命令来处理的,而不是每个文件执行一次.
我尝试过以下方法:
%.b : someDummyFile
someDummyFile :
[run some commands]
Run Code Online (Sandbox Code Playgroud)
问题是即使第一个规则没有请求创建someDummyFile的规则也会被执行,从而导致不良行为.我猜测没有依赖关系的规则会一直执行,即使他们的目标没有被其他规则使用?
我在这里错过了什么?
在尝试调试此问题时,我删除了对第二条规则的所有引用.例如,我将以下规则插入到现有的Makefile中,为什么即使没有其他规则引用它也会执行它?
HELLOWORLD :
echo "# HELLO WORLD! THE NEXT LINE WILL TRIGGER AN ERROR"
DFASDA
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以为C#类赋予多个名称,例如:
Foo {}
class AlternativeFooName指的是Foo
我希望能够通过两个名称,Foo和AlternativeFooName访问Foo,但不必从Foo继承.
对此应用程序将为类提供一个长描述性名称,但在使用时可以缩写它,例如:
而不是Foo f = new Foo(); 能够使用具有相同效果的以下内容:F f = new F();
这应该很容易,但我没有在谷歌找到它:
Java中的.Net的System.Windows.Forms.NumericUpDown是否有等效控件?
所需的功能是选择有效的十进制或整数.
我需要获取任意类型数组的第一个元素的内存地址,该数组存储为Object类型。例如,数组可以是 double[] 或 int[],但在代码中它会被输入为 Object。
虽然获取已知类型数组的地址很简单,但在 C# 中不允许获取对象的地址。是否有一种类型(Object 除外)可以用来存储这样的数组,并且可以更轻松地获取其内存地址?或者有没有办法使用互操作/反射直接访问地址而无需中间数据副本?
请注意,在下面的第二行中,double[] 被存储为一个对象。请注意,在 fixed() 行中,我正在尝试获取 o 的地址,这在 C# 中是不允许的。
提前致谢!
int len=100;
object o = new double [len];
unsafe
{
fixed(int*ptr=&o)
for (int index = 0; index < len; index++)
{
// access data directly to copy it, etc...
}
}
Run Code Online (Sandbox Code Playgroud) 我在Eclipse中使用Google Web Toolkit的Swing Designer来创建和编辑自定义JFrame等组件.
问题是我的课程有时会破坏设计视图(可能是因为项目也是由不同平台上的其他人编辑),我想知道如何恢复它.换句话说,我能够编辑自定义JFrame的代码,但我不能使用可视化编辑器来修改JFrame.我注意到,当设计视图被破坏时,我的JFrame源代码的图标也会变为普通的java-source-code图标.
Eclipse在哪个文件中跟踪可以使用可视化编辑器编辑哪些JFrame,哪些不是?
提前致谢.
c# ×3
java ×2
swing ×2
.net ×1
awt ×1
class ×1
datagrid ×1
designer ×1
eclipse ×1
gwt ×1
inheritance ×1
itemssource ×1
linux ×1
makefile ×1
managed ×1
performance ×1
reflection ×1
syntax ×1
unsafe ×1
wpf ×1