我有NSTableView几个文本列.默认情况下,dataCell这些列是Apple NSTextFieldCell类的一个实例,它可以执行各种奇妙的操作,但它会绘制与单元格顶部对齐的文本,并且我希望文本在单元格中垂直居中.
有一个内部标志NSTextFieldCell可以用来垂直居中文本,它工作得很漂亮.但是,由于它是一个内部标志,它的使用不受Apple的批准,它可能会在未来的版本中消失而不会发出警告.我目前正在使用这个内部标志,因为它简单而有效.Apple显然花了一些时间来实现这个功能,所以我不喜欢重新实现它的想法.
所以; 我的问题是:实现与Apple的NStextFieldCell完全相同的行为的正确方法是什么,但是绘制垂直居中的文本而不是顶部对齐?
为了记录,这是我目前的"解决方案":
@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end
@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
@try { _cFlags.vCentered = centerVertical ? 1 : 0; }
@catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end
Run Code Online (Sandbox Code Playgroud)
使用如下:
[[myTableColumn dataCell] setVerticalCentering:YES];
Run Code Online (Sandbox Code Playgroud) 我已经找到了很多这方面的实际例子,并且在覆盖或隐藏方法时理解实际输出,但是我正在寻找一些有关为什么会出现这种情况的信息以及为什么C#根据多态性规则允许它时,这不应该被允许 - 至少,就我对多态性的理解而言(这似乎与维基百科/ Webopedia上的标准定义一致).
Class Base
{
public virtual void PrintName()
{
Console.WriteLine("BaseClass");
}
}
Class FirstDerived : Base
{
public override void PrintName()
{
Console.WriteLine("FirstDerived");
}
}
Class SecondDerived : Base
{
public new void PrintName()
{
Console.WriteLine("SecondDerived");
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
FirstDerived b = new FirstDerived();
BaseClass a = b;
b.PrintName();
a.PrintName();
Run Code Online (Sandbox Code Playgroud)
我明白了:
FirstDerived FirstDerived
好的,我明白了,这很有道理.
SecondDerived c = new SecondDerived();
BaseClass a = c;
c.PrintName();
a.PrintName();
Run Code Online (Sandbox Code Playgroud)
我明白了:
SecondDerived
BaseClass
Run Code Online (Sandbox Code Playgroud)
好吧,这也是有道理的,实例a看不到c.PrintName()所以它使用自己的方法来打印自己的名称,但是我可以使用以下命令将我的实例转换为其真实类型:
((SecondDerived)a).PrintName();
Run Code Online (Sandbox Code Playgroud)
要么
(a as SecondDerived).PrintName();
Run Code Online (Sandbox Code Playgroud)
获得我期望的输出:
SecondDerived
Run Code Online (Sandbox Code Playgroud)
那么在幕后发生了什么,这在多态性方面意味着什么呢?我被告知这个设施"打破了多态性" …
我正在查看空对象模式,我想知道是否值得实现它或使用"if"检查我的代码intsead中的空值.当我查看实现时,似乎很难保持对象与其null实现很好地同步.通过对主对象进行更改,我们必须检查null对象是否按预期运行,并且很容易产生实现错误.不是吗?
编辑
避免检查null:http://www.invisible-city.com/sharon/2009/03/null-object-pattern-when-slacker-is.html或http://journalofasoftwaredev.wordpress.com/2008/08/19 /空对象的图案按示例/
我怎样才能最好地防止这些库充斥我自己的应用程序log4j总线?我不想将所有内容都设置为ERROR,但是按照这个速度,供应商库以大约一个千兆/天的速度充斥日志文件.我不希望它将任何内容记录到此文件中...
如何在.NET中解析程序集.我的意思是,如何解决具有完全限定名称的程序集.我对公钥/私钥令牌和强命名感到困惑.谢谢
编辑:我也读过关于延迟签名和类似的东西.人们真的使用它吗?(有没有人实际使用过延迟签名)谁生成了签署程序集的密钥.如果我问了太多问题,我很抱歉.但是,我对这件事感到困惑.
我有一个WinForms应用程序,我想在用户单击窗口左上角(图标)或按ALT + SPACE时打开的菜单中添加一个菜单项.
表单只显示MainMenu和ContextMenu,但没有图标菜单或类似的东西.有没有一种简单的方法可以在WinForms应用程序上修改它?
我正在谈论这个菜单,我想添加一个简单的"关于"条目,只是为了让人们检查应用程序中的版本和URL.通常的用户界面中没有好的地方(没有主菜单).
Alt + Space菜单http://img513.imageshack.us/img513/3162/altspacemenu.jpg
在我丰富的空闲时间里,我与许多科学家(主要是生物学家)合作,他们开发软件,数据库和其他与他们工作相关的工具.
通常这些项目是一次性构建的,在内部使用,最终有人决定"哦,这可能对其他人有用",所以他们发布二进制文件或将一个PHP接口打到它上面并将其推到网页.但是,他们通常不会为其他开发人员提供他们的源代码或数据库转储而烦恼,因此在实践中,这些项目通常在编写代码的项目即将结束或失去资金时死亡.几个月(或几年)之后,其他一些实验室需要使用相同类型的工具,他们必须重复第一个实验室所做的工作,该项目最终会死亡,起泡,冲洗,重复.
有没有人对如何说服主要工作不是编程的人有任何建议,这对他们的社区有益,因为他们对他们建立的工具更加开放?
同样,关于如何传达版本控制,错误跟踪,重构,自动化测试,持续集成以及我们专业开发人员认为理所当然的其他常见做法这一想法的任何建议都是值得花时间的好主意吗?
不幸的是,许多科学家似乎认为编程是一种枯燥乏味的工作必需品,他们的研究更重要,没有意识到现在,软件开发是科学研究的一部分,如果社区是整体提高了发展标准的标准,每个人都会受益.
你曾经遇到过这种情况吗?什么对你有用?
这是一个奇怪的问题,我认为它属于Stack Overflow,因为它与HTML/Javascript有关 - 如果它不属于,请告诉我,我会在其他地方问它.
我正在尝试在我的Web应用程序中实现一个组件,但我不知道它叫什么,所以我不知道如何搜索它的帮助!
在左侧的组合框中有一个列表,在中间有一些箭头用于在组合框之间发送列表项,右侧有一个组合框,用于显示您选择的项目.
这是我的意思的"图片":
+-------+ +-------+
| item1 | ---> | item2 |
| item3 | | |
| item4 | <--- | |
+-------+ +-------+
Run Code Online (Sandbox Code Playgroud)
我相信这也有一个JQuery插件,所以如果有人有任何建议,我会很感激.提前致谢!
我有一个由两个进程组成的项目,我需要以快速有效的方式在它们之间传递一些数据.
我知道我可以使用套接字来使用TCP来执行此操作,即使这两个进程始终存在于同一台计算机上,但这似乎不是一个非常有效的解决方案.
我看到很多关于在Linux上使用"管道"的信息.但是我主要想要Windows和Linux(最好通过跨平台库),理想情况是安全,无阻塞.
另一个重要的事情是我需要支持整个应用程序的多个实例(即两个进程),每个实例都有自己独立的通信对象副本.
还有一种跨平台的方式来产生一个新的过程吗?
我在visual studio(2008)中有一个数据库项目,用于将我的数据库结构保存在版本控制系统(Git)中.我使用VS中的数据模式比较工具来维护这个数据库项目.我遇到的问题是我一直在丢失对新对象的权限.
那么我该怎么做: