小编Ian*_*oyd的帖子

支持DPI和默认字体更改

所以我试图弄清楚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开发机器上设计了一个样本表单.然后我试了一下

  • 14 pt Segoe UI 96 DPI机器
  • 14 pt Segoe UI 150 DPI机器

结果并不令人鼓舞,您可以在此屏幕截图中看到:

AutoScaleMode属性未设计为启用.NET窗体以支持不同的字体或DPI设置.那么支持不同字体和DPI设置的正确方法什么?

.net dpi highdpi winforms

27
推荐指数
1
解决办法
6584
查看次数

C#.NET是否支持IDispatch后期绑定?


问题

我的问题是: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)

c# late-binding idispatch

27
推荐指数
3
解决办法
2万
查看次数

ICollection <T>是否有订单?

遵循公共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]语法.

不幸的是,我的内部实现构造了一个数组; 我可以被转换为返回IListICollection,但不作为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)

c# collections icollection

27
推荐指数
3
解决办法
9931
查看次数

为什么<INPUT>比我说的要宽?

给定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从1719更新了.

更新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)

html css html-select html-input

27
推荐指数
1
解决办法
8951
查看次数

如何从ASP.NET中的代码隐藏文件访问IFRAME?

我试图从代码隐藏的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)

asp.net iframe

26
推荐指数
2
解决办法
9万
查看次数

HttpMethod和HttpRequest的RequestType有什么区别?

所述的HttpRequest类定义了两个属性:

HttpMethod:

获取客户端使用的HTTP数据传输方法(如GET,POST或HEAD).

public string HttpMethod { get; }  
Run Code Online (Sandbox Code Playgroud)

客户端使用的HTTP数据传输方法.

RequestType:

获取或设置客户端使用的HTTP数据传输方法(GET或POST).

public string RequestType { get; set; }
Run Code Online (Sandbox Code Playgroud)

表示客户端发送的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)

有什么区别:

  • HttpRequest.HttpMethod
  • HttpRequest.RequestType

什么时候应该使用另一个?

asp.net iis http httphandler httprequest

26
推荐指数
1
解决办法
6611
查看次数

哪些是HTML和XML特殊字符?

HTML和XML中有哪些特殊的保留字符实体?

我所说的信息是:

HTML:

  • & (替换&amp;)
  • < (替换&lt;)
  • > (替换&gt;)
  • " (替换&quot;)
  • ' (替换&apos;)

XML:

  • < (替换&lt;)
  • > (替换&gt;)
  • & (替换&amp;)
  • ' (替换&apos;)
  • " (替换&quot;)

但我无法找到其中任何一个的文档.

W3C确实在可扩展标记语言(XML)1.0(第五版)中提到了某些预定义的实体引用.但它表示这些实体是预定义的(与&copy;预定义的方式相同); 不是他们必须逃脱:

4.6预定义实体

[定义:实体和字符引用都可以用于 转义左尖括号,&符号和其他分隔符.为此目的指定了一组通用实体(amp,lt,gt,apos,quot).也可以使用数字字符引用; 它们在被识别时立即展开,必须被视为字符数据,因此数字字符引用"<"和"&"可用于在字符数据中出现<和&.

必须将哪些字符转义为HTML中的实体引用?必须
哪些字符转义为XML中的实体引用?


更新:

可扩展标记语言(XML)1.0(第五版):

2.4字符数据和标记

&符号(&)和左尖括号(<)不得 以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分.
如果在其他地方需要它们,则必须 …

xml http special-characters entityreference htmlspecialchars

26
推荐指数
1
解决办法
3万
查看次数

.net - 如何更改Exception对象的异常消息?

如何Message在C#中更改Exception对象?

奖金Chatter

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)

.net exception

26
推荐指数
5
解决办法
3万
查看次数

.NET:InvariantCulture和en-US之间有什么区别吗?

鉴于以下两种文化:

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"文化相同?

.net globalization culture internationalization

25
推荐指数
2
解决办法
6962
查看次数

色彩理论:如何将Munsell HVC转换为RGB/HSB/HSL

我正在查看描述牙科中用于描述牙齿颜色的标准颜色的文件.他们引用色调,,色度值,并指出它们来自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%. …

hsl rgb colors hsb color-theory

25
推荐指数
5
解决办法
3万
查看次数