我在绑定的ComboBox(在Windows窗体上)上设置SelectedIndex时遇到问题,我在运行时添加到表单中,我怀疑有些奇怪的事情发生了.
当我尝试这个时,我得到错误"InvalidArgument ='1'的值对'SelectedIndex'无效."
private void Form1_Load(object sender, EventArgs e)
{
List<string> comboBoxList = new List<string>();
comboBoxList.Add("Apples");
comboBoxList.Add("Oranges");
comboBoxList.Add("Pears");
ComboBox comboBox1 = new ComboBox();
comboBox1.DataSource = comboBoxList;
comboBox1.SelectedIndex = 1;
this.Controls.Add(comboBox1);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我直接将项添加到ComboBox,则没有问题,如下所示:
comboBox1.Add("Apples");
Run Code Online (Sandbox Code Playgroud)
此外,如果我在设置SelectedIndex之前将控件添加到表单中也没有问题,如下所示:
ComboBox comboBox1 = new ComboBox();
this.Controls.Add(comboBox1);
comboBox1.DataSource = comboBoxList;
comboBox1.SelectedIndex = 1;
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么我不能从数据源设置选定的索引,直到控件添加到窗体后?
我正在将我们的DAL类库迁移到.NET 4(从.NET 3.5).我们经常使用类型化数据集,我们经常迭代表:
foreach(var row in ds.MyTable) var tmp = row.ID;
Run Code Online (Sandbox Code Playgroud)
这不再起作用,因为设计人员更改了数据集的代码,以便表格不再来自TypedTableBase<T>,而是来自DataTable(并实现非泛型IEnumerable).这就是差异所显示的.因此,该行在object编译时是类型的.
有人知道这是否是通常的行为?目前,我正在按照下面所示的方式进行,但我希望有一个更优雅的解决方案:
foreach(var row in ds.MyTable.Cast<MyDs.MyRow>()) var tmp = row.ID;
Run Code Online (Sandbox Code Playgroud) 我BindingSource有一个BindingList<Foo>附加的数据源.我想用合作BindingSource的Find方法来查找的元素.但是,NotSupportedException当我执行以下操作时会抛出a ,即使我的数据源确实实现了IBindingList(并且MSDN中没有记录此类异常):
int pos = bindingSource1.Find("Bar", 5);
Run Code Online (Sandbox Code Playgroud)
我在下面附上了一个简短的例子(a ListBox,a Button和a BindingSource).有人可以帮我Find调用吗?
public partial class Form1 : Form
{
public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e)
{
var src = new BindingList<Foo>();
for(int i = 0; i < 10; i++)
{
src.Add(new Foo(i));
}
bindingSource1.DataSource = src;
}
private void button1_Click(object sender, EventArgs e)
{
int pos = bindingSource1.Find("Bar", …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用以下代码安排长时间运行的任务:
Task.Factory.StartNew<bool>((a) => WorkTask1(),
TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent)
.ContinueWith(antecedent => WorkCompletedTask1(antecedent.Result),
TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)
WorkCompletedTask1已计划并按预期在UI上显示结果.根据WorkTask1的结果,WorkCompletedTask1可以使用以下语句安排其他任务:
Task.Factory.StartNew<bool>((a) => WorkTask2(),
TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent)
.ContinueWith(antecedent => WorkCompletedTask2(antecedent.Result),
TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)
WorkTask2不会按预期在单独的线程上运行; 它运行在UI线程上,该线程被阻塞直到WorkTask2完成.我认为TaskCreationOptions.LongRunning将保证一个单独的线程.
为什么这不起作用的任何建议?我可以从UI和非UI任务安排添加任务,而不是从UI中的.continuewith任务安排.
破碎的示例项目代码
在窗体上带有button1按钮的空Windows窗体项目中,此代码无法按预期工作(Windows 7 VS2010 Express Net 4.0).T2和T3在UI线程中运行,而不是工作线程.将listBox1添加到button1表单并尝试以下操作:
private delegate void DelegateSendMsg(String msg);
private DelegateSendMsg m_DelegateSendMsg;
private TaskScheduler uiSched;
private Process thisProcess;
private string
thisProcessName,
thisProcessId,
uiThreadName,
nonuiStatus = "Non-UI",
uiStatus = "UI";
private void Form1_Load(object sender, EventArgs e)
{
thisProcess = Process.GetCurrentProcess();
thisProcessName = thisProcess.ProcessName;
thisProcessId = thisProcess.Id.ToString();
uiThreadName = CurrentThread;
m_DelegateSendMsg = …Run Code Online (Sandbox Code Playgroud) 对于Web应用程序,我想生成一个电子邮件验证链接并将其发送给用户.与许多公共网站一样,用户应点击它来验证他的电子邮件地址.看起来类似于:
http://www.foo.bar/validation?code=421affe123j4h141k2l3bjkbf43134kjbfkl34bfk3b4fkjb43ffe
任何人都可以帮我提一些关于正确生成这些验证令牌的提示吗?谷歌搜索最佳实践证明比我更困难.链接应该:
此外,你会找一个随机代码,保存在某个地方,还是生成的代码,我可以重新计算验证?
谢谢你的回复!
马蒂亚斯
PS我正在使用ASP.NET 3.5,以防有一个开箱即用的功能来执行此操作.
我想从 Scala 生成一个进程(就此而言,SBT),以及作为参数传递的两个 SBT 命令。我制作了一个sbt.shshell脚本(sbt文档中手动安装的简化版本):
java -jar /home/bob/sbt/sbt/bin/sbt-launch.jar "$@"
Run Code Online (Sandbox Code Playgroud)
当我从 Ubuntu 中的 bash 提示符(/home/bob/workingdir作为工作目录)调用脚本时,如果工作正常:
~/sbt.sh "project Foo" "run"
Run Code Online (Sandbox Code Playgroud)
但是,我想使用以下代码在 Scala 程序中调用它:
val pseq = Seq("/home/bob/sbt.sh", "\"project Foo\"", "\"run\"")
val pb = scala.sys.process.Process(pseq, new java.io.File("/home/bob/workingdir"))
pb.!
Run Code Online (Sandbox Code Playgroud)
SBT 正常启动和加载,然后失败并显示以下错误输出:
[error] Expected key
[error] "project Foo"
[error] ^
Run Code Online (Sandbox Code Playgroud)
它在 Windows 8 上运行良好,但在 Ubuntu 12.10 上失败。我pseq曾经是一个String拥有完整 bash 命令的普通用户。我变成了 aSeq以便使参数明确分割(而不是在任何空格,即使在引号内)。
谁能指出这两个调用之间有什么区别,或者我还做错了什么?
假设我们只有一个带有int ID的简单对象Person来识别它.如何为Person的每个新实例提供新的ID值(+1),但是在该类Person的构造函数中?(我没有使用DB)
有没有办法在 JavaFX 2 中存储模型对象的标识符或模型对象本身TreeItem<String>?只是Value为了存储文本...
我正在TreeView从模型对象列表中填充 a ,并且需要在用户单击节点时找到它。我已经习惯了工作,Value并Text在.NET Windows窗体或HTML和我恐怕无法适应思维的JavaFX这样...
当我添加一个抛出异常来运行或初始化时,我有一个错误,上面写着:
ray.java:115: error run() in xray cannot implement run() in Runnable
public void run() throws Exception(
^
overriden method does not throw Exception
1 error
Run Code Online (Sandbox Code Playgroud)
我需要尝试{..} catch来获取URL工作.try {...} catch需要抛出异常的作品.