在System.Windows.UIElement有一个CaptureMouse()和配对ReleaseMouseCapture()方法.在这个WPF DragDrop示例中,他们在MouseDown上调用CaptureMouse并在MouseUp上释放它.MSDN中的文档几乎没用 - "CaptureMouse - >捕获鼠标".
在尝试它之前,我认为它以某种方式将鼠标锁定在UIElement界限内,但是当我尝试它时显然不是这样.从试验开始,当鼠标在UIElement之外时似乎与响应事件有关,但不想成为一个货物狂热的程序员,我不想只使用它,因为这个例子,我想它是什么意思的权威描述.
从类中返回对象时,何时是释放内存的正确时间?
例,
class AnimalLister
{
public:
Animal* getNewAnimal()
{
Animal* animal1 = new Animal();
return animal1;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我创建一个Animal Lister的实例并从中获取Animal引用,那么我应该在哪里删除它?
int main() {
AnimalLister al;
Animal *a1, *a2;
a1 = al.getNewAnimal();
a2 = al.getNewAnimal();
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是AnimalLister没有办法跟踪动物创建的列表,所以我如何更改这些代码的逻辑以便有办法删除创建的对象.
我一直在学习C#,我正在努力理解lambdas.在下面的示例中,它打印出10次.
class Program
{
delegate void Action();
static void Main(string[] args)
{
List<Action> actions = new List<Action>();
for (int i = 0; i < 10; ++i )
actions.Add(()=>Console.WriteLine(i));
foreach (Action a in actions)
a();
}
}
Run Code Online (Sandbox Code Playgroud)
显然,lambda后面生成的类正在存储一个引用int i变量的引用或指针,并且每次循环迭代时都会为同一个引用分配一个新值.有没有办法强制lamda获取副本,比如C++ 0x语法
[&](){ ... } // Capture by reference
Run Code Online (Sandbox Code Playgroud)
与
[=](){ ... } // Capture copies
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个能够保持所有物品整齐的容器.我查看了SortedList,但这需要一个单独的密钥,并且不允许重复密钥.我也可以使用未分类的容器,并在每次插入后显式排序.
用法:
我意识到我可以建立一个平衡的树结构,我只是想知道框架是否已经包含这样的野兽.
每逢圣诞节,我们都会在家里为礼物换取名字.这通常涉及多次重绘,直到没有人拉他们的配偶.因此,今年我编写了自己的名字绘图应用程序,其中包含一堆名称,一堆不允许的配对,并向所有人发送电子邮件与他们选择的礼品.
现在,算法就像这样(在伪代码中):
function DrawNames(list allPeople, map disallowedPairs) returns map
// Make a list of potential candidates
foreach person in allPeople
person.potentialGiftees = People
person.potentialGiftees.Remove(person)
foreach pair in disallowedPairs
if pair.first = person
person.Remove(pair.second)
// Loop through everyone and draw names
while allPeople.count > 0
currentPerson = allPeople.findPersonWithLeastPotentialGiftees
giftee = pickRandomPersonFrom(currentPerson.potentialGiftees)
matches[currentPerson] = giftee
allPeople.Remove(currentPerson)
foreach person in allPeople
person.RemoveIfExists(giftee)
return matches
Run Code Online (Sandbox Code Playgroud)
知道更多关于图论的人是否知道某种算法在这里会更好用?为了我的目的,这是有效的,但我很好奇.
编辑:由于电子邮件不久前出现了,我只是希望学习一些东西,我将其重新描述为图论问题.我对排除所有成对的特殊情况不太感兴趣(如配偶没有相互获得).我对那些有足够排除条件的情况更感兴趣,因为找到任何解决方案都会成为困难的部分.我上面的算法只是一个简单的贪心算法,我不确定在所有情况下都会成功.
从完整的有向图和顶点对列表开始.对于每个顶点对,删除第一个顶点到第二个顶点的边.
目标是得到一个图形,其中每个顶点有一条边进入,一条边离开.
这个关于图形编程环境的问题引起了一些启发.我不认为C++或C#真的有利于这种类型的环境,但也许那里有一些东西.
我使用的很多IDE将使用语法高亮来改变关键字,字符串,注释等文本的前景(甚至背景)颜色......
那里有IDE会突出更大的句法结构吗?这是我正在考虑的一个例子.
示例代码结构http://img256.imageshack.us/img256/9441/codestructure.png
(请不要评论我糟糕的颜色选择......我不是一个平面设计师.)
虽然它不是图形化的拖放环境,但突出显示仍然可以全面了解代码的结构.就个人而言,在多年的C++之后学习C#,我仍然抓住了自己绊倒这样一个事实:在一个文件的末尾你通常有一个类的结尾和命名空间的结尾,所以函数的结尾是两个级别的(在C++代码文件中,函数的结尾通常位于缩进的顶层).我通过在附近的括号中发表一些评论来帮助自己:
} // end class
} // end namespace
Run Code Online (Sandbox Code Playgroud)
但在我看来,一些自动着色会使完全没必要.无论如何,这已经完成了吗?如果它是Visual Studio的附加组件,则获得奖励.
我有一系列TextBlock和TextBox控件.有没有办法Style将TextBlocks 应用于s,以便它们可以在它们之后立即对控件进行数据绑定?
我希望能够做到这样的事情:
<Resources..>
<Style x:Key="BindToFollowingTextBoxSibling">
<Setter Property="TextBlock.Text" Value="{Binding RelativeSource={RelativeSource FollowingSibling}, Path=Text, Converter={StaticResource MyConverter}}" />
<Setter Property="TextBlock.Background" Value="{Binding RelativeSource={RelativeSource FollowingSibling}, Path=Text, Converter={StaticResource TextToBrushConverter}}" />
... More properties and converters.
</Style>
</Resources>
...
<TextBlock Style="{StaticResource BindToFollowingTextBoxSibling}"/>
<TextBox/>
<TextBlock Style="{StaticResource BindToFollowingTextBoxSibling}"/>
<TextBox/>
<TextBlock Style="{StaticResource BindToPreviousTextBoxSibling}"/>
Run Code Online (Sandbox Code Playgroud)
这样的事情甚至可能吗?
在C#中,如果我想确定性地清理非托管资源,我可以使用"using"关键字.但是对于多个依赖对象,这最终会进一步嵌套:
using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
{
using (BufferedStream bs = new BufferedStream(fs))
{
using (StreamReader sr = new StreamReader(bs))
{
// use sr, and have everything cleaned up when done.
}
}
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我习惯于使用析构函数来执行此操作:
{
FileStream fs("c:\file.txt", FileMode.Open);
BufferedStream bs(fs);
StreamReader sr(bs);
// use sr, and have everything cleaned up when done.
}
Run Code Online (Sandbox Code Playgroud)
在C#中有更好的方法吗?还是我坚持多层次的嵌套?
我的第一篇文章所以请你放轻松!
我知道C++中的结构和类之间没有真正的区别,但包括我在内的很多人使用结构或类来显示意图 - 用于分组"普通旧数据"的结构和用于具有有意义操作的封装数据的类.
现在,这很好但是你在什么时候开始认为某些东西不仅仅是一个结构而且应该成为一个类?
我认为结构有合理的事情:
我不太确定的事情,但可能会这样做:
我不认为结构应该有:
边界在哪里?
另外,将类实例作为结构的成员是否合理?例如
class C {private: int hiddenData; public: void DoSomething();};
struct S {int a; float b; C c; };
S s; s.c.DoSomething();
Run Code Online (Sandbox Code Playgroud)
记住,我不是关于你可以用C++做什么,我对你在设计好的软件时应该做些什么感兴趣.
思考?