使用反射我有一个对象,我需要将其转换为可迭代的项目列表(类型未知,将是对象).使用Watch窗口我可以看到我的对象是某种类型的数组,因为它告诉我元素的数量,我可以爆炸树视图来查看元素本身.
首先,我需要检查传递的对象是某种数组(可能是List,可能是object []等).然后我需要遍历该数组.但是,我无法进行类型转换.
这是我如何使用它(缩写):
private static void Example(object instance, PropertyInfo propInfo)
{
object anArray = propInfo.GetValue(instance, null);
ArrayList myList = anArray as ArrayList;
foreach (object element in myList)
{
// etc
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了各种不同的演员阵容.上面没有引发异常,但是当anArray实际存在且包含项目时,mylist为null.保存的实际实例是强类型List <>,但如果需要,可以采用有限的表单子集.但是练习的重点是这个Example()方法不知道属性的基本类型.
我可能没有使用正确的控件来满足我的需求.我正在填充一个带控件的表,我希望每列自动调整其中包含的控件的大小.例如,一列文本框将比一列复选框宽.由于不同的操作系统,不同的DPI,不同的字体等的复杂性,我不想摆弄测量是否能帮助它.桌子可以水平扩展以适应控件,带有滚动条.如何通过TableLayoutPanel或其他控件实现这一点?
谢谢.
编辑添加代码:
private void UpdateLocations()
{
tableLayoutPanel1.RowCount = CurrentSchedule.location.Length + 1;
tableLayoutPanel1.ColumnCount = 7;
int row = 1;
int timeWidth = TextRenderer.MeasureText("00:00:00x", tableLayoutPanel1.Font).Width;
Label lab = new Label();
lab.Text = "Location";
tableLayoutPanel1.Controls.Add(lab, 0, 0);
lab = new Label();
lab.Text = "Arrive";
tableLayoutPanel1.Controls.Add(lab, 1, 0);
lab = new Label();
lab.Text = "Depart";
tableLayoutPanel1.Controls.Add(lab, 2, 0);
lab = new Label();
lab.Text = "Pass?";
tableLayoutPanel1.Controls.Add(lab, 3, 0);
lab = new Label();
lab.Text = "Path";
tableLayoutPanel1.Controls.Add(lab, 4, 0);
lab = new Label();
lab.Text …Run Code Online (Sandbox Code Playgroud) 我想将数字存储在类型为或其他简单整数类型的XML文件中,但允许用户以十六进制格式输入数字.XML标准是否允许这样做,因为我找不到任何相关的东西?
例如,如果XSD说:
<xs:element name="value" type="xs:integer" use="required" />
Run Code Online (Sandbox Code Playgroud)
那么我希望XML能够说:
<value>0xFF00FF</value>
Run Code Online (Sandbox Code Playgroud)
或者十六进制的符号.
显然我可以尝试但只能证明在一个特定的实现中支持,而不是它是否是标准.我并不特别在意保存到XML是否会失去基础.
用户的 PC 使用 12 小时制(晚上 11:59)。用户想要使用 24 小时制 (23:59) 输入时间。浏览器各不相同,但 Firefox(例如)甚至不允许您在小时内输入 23,而过去的一些 Win32 组件允许您输入“23:__ --”但在您输入时将其更改为“11:__ PM”移动到分钟字段 - 仍然不理想但更好。
我们是否仍然需要使用一些花哨的 3rd 方组件来处理所有变化以提供跨浏览器的统一用户体验?是否计划在 HTML5.1(或其他)中指定 24 小时格式?
我知道这之前已经被问过好几次了,但我看到的所有答案都是一年多以前的,从那时起事情发生了很大的变化。
我有一个简短的PHP脚本,应该执行MySQL备份并将其通过电子邮件发送给我。但是,mysqldump不会写入数据或结构。调用mysqldump的命令如下所示:
mysqldump --host=localhost --user=xxx --pass=xxx xxx_license > xxx2012-12-28.sql
Run Code Online (Sandbox Code Playgroud)
(xxx用户名和密码与用于php和数据库的另一个脚本的密码相同,所以我知道凭据是正确的)。
输出如下:
-- MySQL dump 10.13 Distrib 5.5.28, for Linux (x86_64)
--
-- Host: localhost Database: xxx_license
-- ------------------------------------------------------
-- Server version 5.5.28-cll
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: …Run Code Online (Sandbox Code Playgroud) 我可以使用XmlDataSource但不能使用我自己的类.我想做的就是将列表框绑定到我的集合实例,然后将文本框链接到列表框,以便我可以编辑该人的姓名(双向).我故意保持这个尽可能简单,希望有人可以填补空白.
XAML:
<Window x:Class="WpfListTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfListTest"
Title="Window1" Height="300" Width="600">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="3"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0">
<ListBox />
</DockPanel>
<DockPanel Grid.Column="2">
<StackPanel>
<Label>Name</Label>
<TextBox />
</StackPanel>
</DockPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
C#代码背后:
namespace WpfListTest
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public People MyPeeps = new People();
public Window1()
{
InitializeComponent();
MyPeeps.Add(new Person("Fred"));
MyPeeps.Add(new Person("Jack"));
MyPeeps.Add(new Person("Jill"));
}
}
public class Person
{
public string Name { …Run Code Online (Sandbox Code Playgroud) 使用xsd.exe我有一个枚举,其中一个元素前面有一个@符号.我无法理解为什么,我无法弄清楚它的用途或含义.在Google上搜索符号的效率并不高.
原始XSD片段:
<xs:simpleType name="stopLocation">
<xs:restriction base="xs:string">
<xs:enumeration value="default"/>
<xs:enumeration value="near"/>
<xs:enumeration value="far"/>
<xs:enumeration value="nearExact"/>
<xs:enumeration value="farExact"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
生成的类片段:
public enum stopLocation {
@default,
near,
far,
nearExact,
farExact,
}
Run Code Online (Sandbox Code Playgroud)
(是的,最后的元素有一个逗号,VS似乎很满意)
谢谢.
如果我有一个ButtonClick事件设置Cursor:= crHourglass,Application.ProcessMessages,然后使用TOpenDialog选择一个文件,然后执行一些CPU密集型操作,光标的行为会有所不同,具体取决于它是否在打开时是否超过现有控件对话框关闭.如果光标在控件上方,则光标保持为沙漏; 如果它完全在应用程序之外,然后在密集过程仍在进行时移动到该区域,则光标保持为箭头.一个人无法点击或做任何事情,因此让用户感到困惑的是获得箭头但却无法对其进行任何操作.
单步执行调试器会显示Cursor在任何位置都应为-11.使用Screen.Cursor而不是Cursor具有相同的效果.
有解决方案吗?
procedure TMyForm.LoadButtonClick(Sender: TObject);
begin
Cursor := crHourglass;
Application.ProcessMessages;
if OpenDialog.Execute then begin
// Do something intensive
// Cursor = crHourglass here but what is displayed is different
end;
Cursor := crDefault;
end;
Run Code Online (Sandbox Code Playgroud)