所以我试图弄清楚Form的AutoScaleMode属性如何可能有助于支持具有与我的工作开发机器不同的字体或DPI的系统.
从SDK:
AutoScaleMode枚举
public enum AutoScaleMode
None Automatic scaling is disabled. Font Controls scale relative to the dimensions of the font the classes are using, which is typically the system font. Dpi Controls scale relative to the display resolution. Common resolutions are 96 and 120 DPI.
默认情况下,.NET 2.0 Forms使用AutoScaleMode.Font.
所以我在我的Windows XP,Tahoma 8 pt,96 DPI开发机器上设计了一个样本表单.然后我试了一下
结果并不令人鼓舞,您可以在此屏幕截图中看到:

AutoScaleMode属性未设计为启用.NET窗体以支持不同的字体或DPI设置.那么支持不同字体和DPI设置的正确方法是什么?
我的问题是:C#nativly支持后期绑定IDispatch吗?
假装我正在尝试自动化Office,同时兼容客户安装的任何版本.
在.NET世界中,如果您安装了Office 2000,那么从现在到结束,每个开发人员和每个客户都需要拥有Office 2000.
在.NET之前的世界中,我们使用COM与Office应用程序进行通信.
例如:
1)使用版本独立的ProgID
"Excel.Application"
Run Code Online (Sandbox Code Playgroud)
解析为:
clsid = {00024500-0000-0000-C000-000000000046}
Run Code Online (Sandbox Code Playgroud)
然后使用COM,我们要求将其中一个类实例化为一个对象:
IUnknown unk;
CoCreateInstance(
clsid,
null,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
IUnknown,
out unk);
Run Code Online (Sandbox Code Playgroud)
现在我们即将参加比赛 - 能够在我的应用程序中使用Excel.当然,如果你真的想要使用该对象,你必须调用一些方法来调用方法.
我们可以得到阿霍德不同的接口声明,翻译成我们的语言.这项技术很好,因为我们得到了
一些示例代码可能是:
Application xl = (IExcelApplication)unk;
ExcelWorkbook workbook = xl.Workbooks.Add(template, lcid);
Worksheet worksheet = workbook.ActiveSheet;
Run Code Online (Sandbox Code Playgroud)
但是使用接口有一个缺点:我们必须得到各种接口声明,转换成我们的语言.我们坚持使用基于方法的调用,必须指定所有参数,例如:
ExcelWorkbook workbook = xl.Workbooks.Add(template, lcid);
xl.Worksheets.Add(before, after, count, type, lcid);
Run Code Online (Sandbox Code Playgroud)
在现实世界中,这证明了我们愿意放弃的这些缺点:
而是使用IDispatch后期绑定:
Variant xl = (IDispatch)unk;
Variant …Run Code Online (Sandbox Code Playgroud) 遵循公共API永远不会返回列表的规则,我正在盲目转换返回列表的所有代码,ICollection<T>而是返回:
public IList<T> CommaSeparate(String value) {...}
Run Code Online (Sandbox Code Playgroud)
变
public ICollection<T> CommaSeparate(String value) {...}
Run Code Online (Sandbox Code Playgroud)
虽然a ICollection有a Count,但是没有办法通过该索引获取项目.
虽然ICollection公开了一个枚举器(允许foreach),但我不能保证枚举的顺序从列表的"顶部"开始,而不是"底部".
我可以通过避免使用来减轻这种情况ICollection,而是使用Collection:
public Collection<T> Commaseparate(String value) {...}
Run Code Online (Sandbox Code Playgroud)
这允许使用Items[index]语法.
不幸的是,我的内部实现构造了一个数组; 我可以被转换为返回IList或ICollection,但不作为Collection.
有没有办法按顺序访问集合的项目?
这引出了一个更广泛的问题:是否一个ICollection的,即使有订单?
从概念上讲,想象一下我想解析一个命令行字符串.保持物品的顺序至关重要.
从概念上讲,我需要一个表示"有序"字符串元组集的契约.在API合同的情况下,为了表明订单,以下哪项是正确的:
IEnumerable<String> Grob(string s)
ICollection<String> Grob(string s)
IList<String> Grob(string s)
Collection<String> Grob(string s)
List<String> Grob(string s)
Run Code Online (Sandbox Code Playgroud) 给定a <select>和<input>元素,两者都指定为200px宽:
<!doctype html>
<body>
<select style="width: 200px"></select><br/>
<input style="width: 200px" type="text">
</body>
<html>
Run Code Online (Sandbox Code Playgroud)
一个比另一个更宽1,2,3,4:

这是什么原因?
如果有人能说出理由,也许解决方案是显而易见的,而不是黑客和祈祷.
应用的布局非常合理:

更新1:当我写这个问题时,Chrome从17到19更新了.
更新2:将填充<input>从1更改为0:
<!doctype html>
<body>
<select style="width: 200px"></select><br/>
<input style="width: 200px; padding: 0" type="text">
</body>
<html>
Run Code Online (Sandbox Code Playgroud)
不会使<input> 200px宽(即不修复它).
更新3: 应用CSS重置:
<!doctype html>
<head>
<style type="text/css">
* {
padding: 0;
margin: 0; …Run Code Online (Sandbox Code Playgroud) 我试图从代码隐藏的aspx.cs文件中设置IFRAME html控件的属性.
我遇到一个帖子,说你可以使用FindControl来查找非asp控件:
aspx文件包含:
<iframe id="contentPanel1" runat="server" />
Run Code Online (Sandbox Code Playgroud)
然后代码隐藏文件包含:
protected void Page_Load(object sender, EventArgs e)
{
HtmlControl contentPanel1 = (HtmlControl)this.FindControl("contentPanel1");
if (contentPanel1 != null)
contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";
}
Run Code Online (Sandbox Code Playgroud)
除了找不到控件之外,contentPanel1为null.
更新1
看着渲染的html:
<iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe>
Run Code Online (Sandbox Code Playgroud)
我尝试将代码更改为:
HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1");
if (contentPanel1 != null)
contentPanel1.Attributes["src"] = "http://www.clis.com";
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.
我正在使用MasterPage.
更新2
将aspx文件更改为:
<iframe id="contentPanel1" name="contentPanel1" runat="server" />
Run Code Online (Sandbox Code Playgroud)
也没有帮助
回答
答案很明显,甚至不敢问原问题.如果你有aspx代码:
<iframe id="contentPanel1" runat="server" />
Run Code Online (Sandbox Code Playgroud)
并且想要从代码隐藏文件中访问iframe,您只需访问它:
this.contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";
Run Code Online (Sandbox Code Playgroud) 所述的HttpRequest类定义了两个属性:
获取客户端使用的HTTP数据传输方法(如GET,POST或HEAD).
Run Code Online (Sandbox Code Playgroud)public string HttpMethod { get; }客户端使用的HTTP数据传输方法.
获取或设置客户端使用的HTTP数据传输方法(GET或POST).
Run Code Online (Sandbox Code Playgroud)public string RequestType { get; set; }表示客户端发送的HTTP调用类型的字符串.
这两个属性有什么区别?我什么时候想要使用另一个?哪个是检查以查看客户端使用的数据传输方法的正确方法?
文档表明HttpMethod将返回使用的动词:
例如GET,POST或HEAD
而RequestType上的文档似乎只表示两个可能值中的一个:
GET或POST
我使用动词的随机抽样进行测试,这两个属性似乎都支持所有动词,并且都返回相同的值:
测试:
Client Used HttpMethod RequestType
GET GET GET
POST POST POST
HEAD HEAD HEAD
CONNECT CONNECT CONNECT
MKCOL MKCOL MKCOL
PUT PUT PUT
FOOTEST FOOTEST FOOTEST
Run Code Online (Sandbox Code Playgroud)
有什么区别:
什么时候应该使用另一个?
HTML和XML中有哪些特殊的保留字符实体?
我所说的信息是:
HTML:
& (替换&)< (替换<)> (替换>)" (替换")' (替换')XML:
< (替换<)> (替换>)& (替换&)' (替换')" (替换")但我无法找到其中任何一个的文档.
W3C确实在可扩展标记语言(XML)1.0(第五版)中提到了某些预定义的实体引用.但它表示这些实体是预定义的(与©预定义的方式相同); 不是他们必须逃脱:
4.6预定义实体
[定义:实体和字符引用都可以用于 转义左尖括号,&符号和其他分隔符.为此目的指定了一组通用实体(amp,lt,gt,apos,quot).也可以使用数字字符引用; 它们在被识别时立即展开,必须被视为字符数据,因此数字字符引用"<"和"&"可用于在字符数据中出现<和&.
必须将哪些字符转义为HTML中的实体引用?必须将
哪些字符转义为XML中的实体引用?
更新:
2.4字符数据和标记
&符号(
&)和左尖括号(<)不得 以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分.
如果在其他地方需要它们,则必须 …
xml http special-characters entityreference htmlspecialchars
如何Message在C#中更改Exception对象?
该Message属性Exception是只读的:
public virtual string Message { get; }
Run Code Online (Sandbox Code Playgroud)
在PHP中,同样的问题被回答为"你不能",但是给出了一个解决方法:
但是,您可以确定它的类名和代码,并使用相同的代码但使用不同的消息抛出同一类的新类.
如何确定异常的类名,并在C#中使用不同的消息抛出同一个类的新类?
例如:
catch (Exception e)
{
Exception e2 = Activator.CreateInstance(e.GetType());
throw e2;
}
Run Code Online (Sandbox Code Playgroud)
不起作用,因为Message异常的属性是只读的和.NET.见原始问题.
更新
我尝试捕获我期望的每种类型的异常:
try
{
reader.Read();
}
catch (OleDbException e)
{
throw new OleDbException(e, sql);
}
catch (SqlException e)
{
throw new SqlException (e, sql);
}
catch (IBM.DbException e)
{
throw new IBM.DbException(e, sql);
}
catch (OdbcException e)
{
throw new OdbcException …Run Code Online (Sandbox Code Playgroud) 鉴于以下两种文化:
CultureInfo c1 = InvariantCulture;
CultureInfo c2 = new CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)
我要检查两种文化特有的每一条信息,例如:
c1.DateTimeInfo.ShortDatePattern;
c2.DateTimeInfo.ShortDatePattern;
c1.DateTimeInfo.LongDatePattern;
c2.DateTimeInfo.LongDatePattern;
c1.NumberFormat.CurrencyDecimalDigits;
c2.NumberFormat.CurrencyDecimalDigits;
c1.TextInfo.IsRightToLeft;
c2.TextInfo.IsRightToLeft;
Run Code Online (Sandbox Code Playgroud)
我会发现有什么不同吗?
换句话说,InvariantCulture,出于各种目的,是否与"en-US"文化相同?
我正在查看描述牙科中用于描述牙齿颜色的标准颜色的文件.他们引用色调,值,色度值,并指出它们来自1905年Munsell的颜色描述:
AH Munsell在1905年开发的颜色符号系统根据三个属性识别颜色:HUE,VALUE(亮度)和CHROMA(饱和度)[ 15 ]
HUE(H):Munsell将色调定义为我们将一种颜色与另一种颜色区分开来的质量.他选择了五种主要颜色:红色,黄色,绿色,蓝色和紫色; 五种中间色:黄红色,绿黄色,蓝绿色,紫蓝色和红紫色.它们被放置在相同点的色环周围,这些点之间的颜色是两者的混合,有利于更接近的点/颜色(见图1).
VALUE(V):此符号表示颜色相对于中性灰度的亮度或暗度,中性灰度从绝对黑色(值符号0)延伸到绝对白色(值符号10).这实际上是颜色的"明亮"程度.
CHROMA(C):这表示给定色调与相同值的中性灰色的发散程度.根据要评估的样品的强度(饱和度),色度的范围从0变为中性灰色到10,12,14或更远.
有各种用于分类颜色的系统,Vita系统最常用于牙科.这使用字母A,B,C和D来表示牙齿的色调(颜色).色度和值均由1到4的值表示.A1比A4轻,但A4比A1更饱和.如果按照值(即亮度)的顺序放置,从最亮到最暗的顺序将是:
A1,B1,B2,A2,A3,D2,C1,B3,D3,D4,A3.5,B4,C2,A4,C3,C4
每种色调的色调,值和色度的确切值如下所示(16)
所以我的问题是,任何人都可以将Munsell HVC转换为RGB,HSB或HSL吗?
Hue Value (Brightness) Chroma(Saturation)
=== ================== ==================
4.5 7.80 1.7
2.4 7.45 2.6
1.3 7.40 2.9
1.6 7.05 3.2
1.6 6.70 3.1
5.1 7.75 1.6
4.3 7.50 2.2
2.3 7.25 3.2
2.4 7.00 3.2
4.3 7.30 1.6
2.8 6.90 2.3
2.6 6.70 2.3
1.6 6.30 2.9
3.0 7.35 1.8
1.8 7.10 2.3
3.7 7.05 2.4
Run Code Online (Sandbox Code Playgroud)
他们说价值(亮度)不同0..10,这很好.所以我认为7.05意味着70.5%. …
.net ×3
asp.net ×2
c# ×2
http ×2
collections ×1
color-theory ×1
colors ×1
css ×1
culture ×1
dpi ×1
exception ×1
highdpi ×1
hsb ×1
hsl ×1
html ×1
html-input ×1
html-select ×1
httphandler ×1
httprequest ×1
icollection ×1
idispatch ×1
iframe ×1
iis ×1
late-binding ×1
rgb ×1
winforms ×1
xml ×1