我想构建一个用户界面,由于历史原因,它有很多"列"信息.其中许多在所有情况下都与所有用户无关,所以我想我会看到停靠面板,以允许用户根据他们的工作场景隐藏或重新排列列.
这是.NET 3.5中的Winforms.
因此,我想要以下内容:
示例样机http://images.vkarlsen.no/so/2902953/dock-test.png
到目前为止,我已经尝试了以下组件包,没有运气:
Telerik的
允许我停靠在标签页内,但停靠面板无法从一个标签页移动到另一个标签页.当尝试将浮动面板拖放到与其来源不同的选项卡页面上时,它会显示停靠栏将成功,但是当它被丢弃时,它将停靠在其所有者容器上.
Divelements SandDoc
与Telerik相同的问题.
DevExpress XtraBars
与Telerik相同的问题.
http://sourceforge.net/projects/dockpanelsuite/
同样的问题,停靠站内容窗口只能属于一个停靠面板,这意味着它无法从一个选项卡迁移到另一个选项卡.
基本上,有没有人知道任何这样的组件(包)可以让我做我想要的?
编辑:好的,我试过让Sourceforge控件在上面工作,但我看不出如何使这个工作.
基本上,这就是我需要做的事情:
如果我理解下面的答案提到这个控件,我应该使用DockPanel而不是TabControl,而DockPane而不是TabPage,但据我所知,这只能让我能够停靠和取消选项卡页面,而这不是我想要的是.
无论如何,这是一个程序文件,只需创建一个Winforms项目,从sourceforge项目添加对.dll的引用,并在Program.cs中粘贴此代码:
using System;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
namespace DockTest
{
public class DockWindow1 : DockContent
{
public DockWindow1()
{
TabText = "Dock-window #1";
DockPanel panel = new DockPanel();
panel.Dock = DockStyle.Fill;
Controls.Add(panel);
// tried this related to the exceptions
// this.DockPanel = panel;
}
}
public class DockWindow2 : DockContent
{
public DockWindow2() …Run Code Online (Sandbox Code Playgroud) 我的理解是Grails应用程序中有两个显而易见的地方可以进行元编程:
init关闭Bootstrap.groovydoWithDynamicMethods插件关闭我在这里引用的元编程应该在整个应用程序中可见,典型的例子包括添加(或替换)第三方类的方法.
String.metaClass.myCustomMethod = { /* implementation omitted */ }
Run Code Online (Sandbox Code Playgroud)
(1)的缺点是当动态重新加载应用程序时不会应用元编程.(2)的缺点是我需要创建和维护一个完整的插件,只是为了一点元编程.
有没有更好的地方做这种元编程?
根据Ted的建议,我将以下课程添加到 src/groovy
package groovy.runtime.metaclass.java.lang
/**
* Adds custom methods to the String class
*/
class StringMetaClass extends DelegatingMetaClass {
StringMetaClass(MetaClass meta) {
super(meta)
}
Object invokeMethod(Object object, String method, Object[] arguments) {
if (method == 'hasGroovy') {
object ==~ /.*[Gg]roovy.*/
} else {
super.invokeMethod object, method, arguments
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后重新启动应用程序并在Grails控制台中运行以下代码:
assert 'mrhaki loves Groovy'.hasGroovy()
Run Code Online (Sandbox Code Playgroud)
我得到以下异常
groovy.lang.MissingMethodException: No signature of …Run Code Online (Sandbox Code Playgroud) 我使用jQuery创建了一个新的HTML元素.
var v=jQuery('<p>Hello</p>);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试获取新元素的nodeName时,
v.nodeName.toLowerCase();
Run Code Online (Sandbox Code Playgroud)
我收到错误,说没有定义nodeName.这有什么不对?
谢谢.
我有一个程序有很多独立的计算,所以我决定并行化它.
我使用Parallel.For/Each.
双核机器的结果还可以 - 大多数时候CPU利用率约为80%-90%.但是,使用双Xeon机器(即8个内核),我只获得了大约30%-40%的CPU利用率,尽管该程序在并行部分上花费了相当多的时间(有时超过10秒),我看到它使用了与串行部分相比,这些部分中大约有20-30个线程.每个线程需要1秒以上才能完成,所以我认为它们没有理由不能并行工作 - 除非存在同步问题.
我使用了VS2010的内置分析器,结果很奇怪.即使我只在一个地方使用锁,分析器报告大约85%的程序时间用于同步(也是5-7%睡眠,5-7%执行,低于1%IO).
锁定的代码只是一个缓存(字典)get/add:
bool esn_found;
lock (lock_load_esn)
esn_found = cache.TryGetValue(st, out esn);
if(!esn_found)
{
esn = pData.esa_inv_idx.esa[term_idx];
esn.populate(pData.esa_inv_idx.datafile);
lock (lock_load_esn)
{
if (!cache.ContainsKey(st))
cache.Add(st, esn);
}
}
Run Code Online (Sandbox Code Playgroud)
lock_load_esn是Object类型的静态成员.
esn.populate使用单独的StreamReader为每个线程从文件中读取.
但是,当我按下同步按钮以查看导致最大延迟的原因时,我看到探查器报告的是作为功能入口线的线,并且不报告锁定的部分本身.
它甚至没有报告包含上述代码的功能(提醒 - 程序中唯一的锁定)作为阻塞配置文件的一部分,噪声级别为2%.当噪音水平为0%时,它会报告程序的所有功能,我不明白为什么它们被视为阻塞同步.
所以我的问题是 - 这里发生了什么?
85%的时间花在同步上怎么样?
如何找出程序中并行部分的实际问题?
谢谢.
更新:深入研究线程(使用极其有用的可视化工具)后,我发现大部分同步时间都花在等待GC线程完成内存分配上,并且由于通用数据结构调整大小操作需要频繁的分配.
我将不得不看看如何初始化我的数据结构,以便它们在初始化时分配足够的内存,可能避免GC线程的这种竞争.
我今天晚些时候会报告结果.
更新:看起来内存分配确实是问题的原因.当我在并行执行的类中使用所有词典和列表的初始容量时,同步问题更小.我现在只有大约80%的同步时间,CPU利用率达到70%(先前的峰值仅为40%左右).
我进一步钻进每个线程,发现现在很多调用GC分配用于分配不属于大字典的小对象.
我通过为每个线程提供一个预先分配的这类对象池来解决这个问题,我使用它而不是调用"new"函数.
所以我基本上为每个线程实现了一个单独的内存池,但是以非常粗糙的方式,这非常耗时,实际上并不是很好 - 我仍然需要使用很多新的来初始化这些对象,只有现在我全局执行一次,即使不得不增加池的大小,GC线程上的争用也会减少.
但这绝对不是我喜欢的解决方案,因为它不容易推广,我不想写自己的内存管理器.
有没有办法告诉.NET为每个线程分配预定义的内存量,然后从本地池中获取所有内存分配?
我想在UIPickerView中选择多行,所以我有想法在表中显示我的数据并将该表作为子视图添加到选择器中.我试过这个,但没有成功.
有什么建议怎么做?
我有一个看起来像这样的文件:
ftp://url1/files1.tar.gz dir1
ftp://url2/files2.txt dir2
.... many more...
Run Code Online (Sandbox Code Playgroud)
我想要做的是这些步骤:
但是,为什么我的这种做法不起作用
while(<>) {
chomp;
my ($url,$dir) = split(/\t/,$_);
system("mkdir $dir");
system("cd $dir");
system("wget $url"); # This doesn't get executed
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
有没有一种方法(或编辑器)允许我从源文件(例如*.java)中链接图像/文件/ http链接,有点像富文本文档?
这样,在阅读代码时,我可以快速查看附加图像(增加注释),而不是打开浏览器等.
我有这个View类.它将子视图添加到自身,然后我想在其中一个上进行CATransform3DMakeRotation(最后一个添加了addSubiew).它位于顶部,但一旦动画开始,它就在奥得河景色之下.这是我的CATransform3DMakeRotation代码:
CABasicAnimation *topAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
topAnim.duration=3.3;
topAnim.repeatCount=0;
topAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0.0, 0, 0, 0)];
float f = DegreesToRadians(180); // -M_PI/1;
topAnim.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(f, 1,1, 0)];
//topAnim.delegate = self;
topAnim.removedOnCompletion =NO;
topAnim.fillMode = kCAFillModeForwards;
[[KuvertLasche layer] addAnimation:topAnim forKey:@"flippy"];
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?编辑:此视图位于包含大量其他视图的子视图中:
如果我将它从letterView中取出并将其放在letterView上方的self.view上,它将进入中途,然后进入其他视图.很奇怪.有什么建议?
我有一个ASP.NET文档,其中包含一个Image元素.
我mouseover在这个图像元素上创建了一个函数,它工作正常.
问题是:
如果文档加载自身时鼠标在元素上是ALREADY,则该mouseover函数不会触发(我需要mouseout然后mouseover再触发它).如果鼠标已经在这个元素的顶部,
有没有办法检查$(document).ready函数?如果是 - 触发mouseover功能.
谢谢大家!