如何实现像Firefox这样的TPageControl的TTabsheet的关闭按钮?
编辑:
Delphi版本:Delphi 2010
操作系统:Windows XP及更高版本
我可以很容易地序列化列表:
List<String> fieldsToNotCopy =new List<String> {"Iteration Path","Iteration ID"};
fieldsToNotCopy.SerializeObject("FieldsToNotMove.xml");
Run Code Online (Sandbox Code Playgroud)
现在我需要一个像这样的方法:
List<String> loadedList = new List<String();
loadedList.DeserializeObject("FieldsToNotMove.xml");
Run Code Online (Sandbox Code Playgroud)
有这样的方法吗?或者我是否需要创建一个XML阅读器并以这种方式加载它?
编辑:原来没有内置的SerialzeObject.我早些时候在我的项目中做了一个而忘了它.当我发现它时,我认为它是内置的.万一你好奇这是我做的SerializeObject:
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
Run Code Online (Sandbox Code Playgroud) 我想测试表单验证逻辑的is_valid部分.在我的测试驱动程序中,我有:
test_animal = Animal(name="cat", number_paws="4") test_animal_form = AnimalForm(instance=test_animal) assertEqual(test_animal_form.is_valid(), True)
断言失败了,但从我看到的情况来看,表格中不应该有任何错误.我没有在表单中看到任何验证错误.如果加载到表单中的test_animal实例应该验证,它是否应该作为测试用例?
我在我的程序中使用了一些JFormattedTextFields.由于某些原因,当单击文本字段后文本字段获得焦点时,插入符号位置始终跳转到左侧(位置0).我希望插入符号最终位于用户点击的位置.因此,如果我在两个数字之间点击,则插入符应该在这两个数字之间.
所以我实现了一个FocusListener,它将获得点击位置并在那里设置插入位置.
FocusListener focusListener = new FocusListener(){
public void focusGained(FocusEvent evt) {
JFormettedTextField jftf = (JFormattedTextField) evt.getSource();
//This is where the caret needs to be.
int dot = jftf.getCaret().getDot();
SwingUtilities.invokeLater( new Runnable() {
public void run() {
'the textField that has focus'.setCaretPosition('Some how get the evt or dot');
}
});
}
public void focusLost (FocusEvent evt) {}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了很多让他上班的事情.我尝试过使用final关键字,但是只能用于单个文本字段.
我在焦点监听器中使用了set/get方法来分配当前对象,但我不确定如何使其"安全"(例如,它们是否需要同步?).
也许有一些我想念的东西?
如何yield return使用Scala continuation 实现C#?我希望能够以Iterator相同的风格编写Scala .这篇Scala新闻帖的评论中有一个刺,但它不起作用(尝试使用Scala 2.8.0测试版).一个相关问题的答案表明这是可能的,但是虽然我已经玩了一段时间的分隔延续,但我似乎无法完全理解如何做到这一点.
下面是一些linqpad测试代码.当它运行时出错,因为"item"的第二个实例具有子项目的空列表而不是空列表.
我想以完全相同的方式处理这两种情况(空或空列表),但我想知道是否有一种更简洁的方法,而不仅仅是对列表进行空检查,并在存在空值时初始化空列表.
换句话说,我可以这样做:
from si in (i.subitems == null ? new List<item>() : i.subitems)
Run Code Online (Sandbox Code Playgroud)
但那有点难看,我想知道我怎么能改进呢?
public class item
{
public string itemname { get; set; }
public List<item> subitems { get; set; }
}
void Main()
{
List<item> myItemList = new List<item>()
{
new item
{
itemname = "item1",
subitems = new List<item>()
{
new item { itemname = "subitem1" },
new item { itemname = "subitem2" }
}
},
new item
{
itemname = "item2"
}
};
myItemList.Dump();
var …Run Code Online (Sandbox Code Playgroud) 我有一条看起来像这样的路线:
routes.MapRoute(
"BlogTags",
"Blog/Tags/{tag}",
new { controller = "Blog", action = "BrowseTag", viewRss = false }
);
Run Code Online (Sandbox Code Playgroud)
我使用这样的路线创建一个URL:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = sortedTags[i].Tag })%>
Run Code Online (Sandbox Code Playgroud)
但是,当使用带有#字符的标记(如"C#")时,路由引擎不会将其转义,因此我得到一个如下所示的URL:
<a href="/Blog/Tags/C#">C#</a>
Run Code Online (Sandbox Code Playgroud)
我需要的是#swardped,所以它看起来像这样:
<a href="/Blog/Tags/C%23">C#</a>
Run Code Online (Sandbox Code Playgroud)
我在标签进入路线之前尝试在标签上做一个Url.Encode,如下所示:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = Url.Encode(sortedTags[i].Tag) })%>
Run Code Online (Sandbox Code Playgroud)
但是这会使路由引擎双重转义#(导致ASP.NET崩溃并出现错误的请求错误)):
<a href="/Blog/Tags/C%2523">C#</a>
Run Code Online (Sandbox Code Playgroud)
我怎样才能让路由引擎正确地为我转义#字符?
提前谢谢你的帮助.
如何从内置Web浏览器中的代码而不是在我的应用程序中打开URL?
我试过这个:
try {
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(download_link));
startActivity(myIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "No application can handle this request."
+ " Please install a webbrowser", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但我有一个例外:
No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com
Run Code Online (Sandbox Code Playgroud) 我试图将ISO 8601格式的字符串转换为java.util.Date.
yyyy-MM-dd'T'HH:mm:ssZ如果与Locale(比较样本)一起使用,我发现该模式符合ISO8601标准.
但是,使用java.text.SimpleDateFormat,我无法转换格式正确的String 2010-01-01T12:00:00+01:00.我必须先将它转换为2010-01-01T12:00:00+0100没有冒号的.
那么,目前的解决方案是
SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);
String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100");
System.out.println(ISO8601DATEFORMAT.parse(date));
Run Code Online (Sandbox Code Playgroud)
这显然不是那么好.我错过了什么或者有更好的解决方案吗?
回答
感谢JuanZe的评论,我发现了Joda-Time魔术,这里也有描述.
所以,解决方案是
DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00+01:00";
System.out.println(parser2.parseDateTime(jtdate));
Run Code Online (Sandbox Code Playgroud)
或者更简单地说,通过构造函数使用默认解析器:
DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;
Run Code Online (Sandbox Code Playgroud)
对我来说,这很好.
c# ×3
java ×2
.net ×1
android ×1
asp.net-mvc ×1
caret ×1
date ×1
delphi ×1
django ×1
django-forms ×1
focus ×1
iso8601 ×1
linq ×1
scala ×1
scala-2.8 ×1
sql ×1
swing ×1
tpagecontrol ×1
triggers ×1
url ×1
url-routing ×1
username ×1
yield ×1
yield-return ×1