小编Ano*_*ser的帖子

黄金比例的标准名称空间中是否有定义的值?

我试图找出是否已经在其中一个标准命名空间中定义了黄金比例的值,但我无法在文档或其他在线资源中找到任何内容.

那么我可能错过的标准命名空间中已经定义的黄金比率是否有价值?

MathMath.PiMath.E,但没有Math.Phi

c#

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

WM_NCLBUTTONUP消息在拖动表单结尾时没有发送,怎么办?

编辑: tl;博士去第一条评论.

这个问题源于另一个问题,当鼠标在表格边框上下降时,我的获取MouseDown事件?

在那个问题中,当用户在表单边框上按下鼠标左键(准备拖动)时,我需要有一个表单触发事件,这非常有效.问题是当用户完成此操作时,通过放开鼠标左键,我还想要触发一个事件.

为此,我将此代码生成为"基本形式"类,其他形式将从中派生.我已经删除了FireMouseButton...()简洁的方法; 他们解雇自定义事件.

const int WM_NCLBUTTONUP = 0xA2;
const int WM_NCLBUTTONDWN = 0xA1;
protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCLBUTTONUP)
        FireMouseButtonUp();
    if (m.Msg == WM_NCLBUTTONDWN)
        FireMouseButtonDown();
    base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)

这个问题是WM_NCLBUTTONUP消息没有像我预期的那样发送.在查看了描述后,WM_NCLBUTTONUP我可以看到为什么,

当用户在窗口的非客户区域内释放鼠标左键时,会发布[WM_NCLBUTTONUP].此消息将发布到包含光标的窗口.如果窗口捕获了鼠标,则不会发布此消息.

因为表单在拖动时捕获了鼠标,所以它不会收到WM_NCLBUTTONUP消息.(如果形式最大化的话会这样).这个问题解释得更好一个窗口未最大化时丢失的WM_NCLBUTTONUP消息的奇怪问题.

这个问题的答案有点帮助,但对我来说却引起很多困惑.在下面的代码中我有一个小的SSCCE,它实现了从上面的答案的解决方案给出的一些代码,检查WMNCHITTEST消息以查看鼠标是否已被释放;

这个想法是WM_NCHITTEST当鼠标在表单中移动时应该发送.因此,一旦拖动停止,此消息应与DragStartPointWndProc消息参数中的鼠标位置一起发送; 其中DragStartPoint所述当记录WM_NCLBUTTONDOWN被接收的消息.

但问题是,在WM_NCHITTEST拖动开始后并不总是发送,只有在顶部边框的远端开始拖动时(见下图).在WM_NCLBUTTONDOWN顶部边框(从不为两侧或底部),单击后始终发送消息.所以这很好,但WM_NCHITTEST正如所指出的那样WM_NCLBUTTONUP,但有时只会发送.

在此输入图像描述

如何让WM_NCHITTEST"测试"在下面的代码中工作,以便在用户停止拖动表单后通知我?("测试"正在检查DragStartPointif语句中WM_NCHITTEST …

c# wndproc winforms

5
推荐指数
0
解决办法
1062
查看次数

RichTextBox语法高亮显示

我正在使用此代码.它用于语法高亮显示RichTextBox.我专门找在函数ProcessLine()OnTextChanged(),我已经修改为这样:

protected override void OnTextChanged(EventArgs e)
{
    // Calculate stuff here.
    m_nContentLength = this.TextLength;

    int nCurrentSelectionStart = SelectionStart;
    int nCurrentSelectionLength = SelectionLength;

    m_bPaint = false;

    // Find the start of the current line.
    m_nLineStart = nCurrentSelectionStart;
    while ((m_nLineStart > 0) && (Text[m_nLineStart - 1] != '\n'))
        m_nLineStart--;
    // Find the end of the current line.
    m_nLineEnd = nCurrentSelectionStart;
    while ((m_nLineEnd < Text.Length) && (Text[m_nLineEnd] != '\n'))
        m_nLineEnd++;
    // Calculate the length of …
Run Code Online (Sandbox Code Playgroud)

c# richtextbox

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

计算后台工作人员OnProgressChanged事件的剩余总时间和总时间

我有一个后台工作人员报告计算的进度.它返回它在ProgressChangedEventArgs中处理的当前行号.我可以从那里确定做的百分比

(int) (100 * (double)e.ProgressPercentage / csTextLines) 
Run Code Online (Sandbox Code Playgroud)

其中csTextLines是我正在处理的行数.我遇到的麻烦是我想要得到总估计时间和剩余时间.我看到后台工作程序中没有任何内容可以帮助我,所以我想它必须使用DateTime计算完成.这是我到目前为止尝试获得TotalEstTime和TimeLeft的方法

  • TimeLeft = TotalEstTime - TimeSoFar;
  • TotalEstTime = AvgTimeForEachLine*#OfLines;

哪里

  • TimeSoFar = DateTime.Now - m_startTime;
  • AvgTimeForEachLine =(TimeFromLastLine + TotalTimeForAllLines)/ #OfLines;

哪里

  • TimeFromLastLine = DateTime.Now - LastRecordedTime;
  • TotalTimeForAllLines + = TimeFromLastLine;

所以,如果我们把它变成代码,我到目前为止

// This event handler updates the progress. 
    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        TimeSpan difInCalls = DateTime.Now.Subtract(m_LastProgressCall);
        m_LastProgressCall = DateTime.Now;
        m_totalDif = m_totalDif.Add(difInCalls);
        TimeSpan avgDif = new TimeSpan(0, 0, 0, 0, ((int)m_totalDif.TotalMilliseconds / m_csNumLines));
        double totalTime = m_csNumLines * avgDif.TotalSeconds;
        double …
Run Code Online (Sandbox Code Playgroud)

c# datetime date-arithmetic winforms

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

Java,序列化,您可以序列化类中的类

可能重复:
为什么可序列化的内部类不可序列化?

我有一个没有实现的类Serializable.在该类的内部,我有一个数据类,它保存整个程序的数据,该程序实现Serializable并具有版本ID.

我的问题是,当我尝试在我的主类中序列化数据对象时,我从主类而不是数据类中获取对象写入错误.主类没有实现Serializable.

你能在非序列化类中序列化一个类吗?

例:

class main
{
   class data implements Serializable
   {  // data and functions }

   public void main(args)
   { data d = new data();
     // ofcourse I have the proper inits and checks for the output stream and such
     writeObject(data);  // Throws Class not Serializable error.}
} 
Run Code Online (Sandbox Code Playgroud)

java

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

你能解释印刷工会成员的结果吗?

谁能告诉我,为什么data.idata.f被损坏?这段代码来自的网站试图解释它,但使用了错误的语法和许多错别字,所以我想知道这里是否有人可以帮助我.

#include <stdio.h>
#include <string.h>

union Data
{
   int i;
   float f;
   char  str[20];
};

int main( )
{
   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译并执行上述代码时,会产生以下结果:

data.i:1917853763
data.f:4122360580327794860452759994368.000000
data.str:C编程

c

0
推荐指数
1
解决办法
106
查看次数

将变量作为对象进行转换会导致该变量丢失数据吗?

说我有以下代码

...
PointPair newPoint = new PointPair(123, 432);
newData((Object) newPoint);
...

public override void newData(Object data)
{
    PointPair newData;
    if (data is PointPair)
        newData = (PointPair)data;
    else
        newData = new PointPair(0, 0);

    // Do stuff with newData
}
Run Code Online (Sandbox Code Playgroud)

我的PointPair对象在转换/转发期间会丢失数据/信息object吗?

我使用object或是否重要Object?(资本O)

c# casting object

0
推荐指数
1
解决办法
959
查看次数

构建增加大小的int []

构建从0开始并增加到给定点的整数数组的最简单方法是什么?

背景: 我有一个struct包含int[]其他数组的代表索引.

我想表示我希望使用所有索引,通过int从0开始填充此数组并逐渐增加,直到int numTotalIndexes;我确信有更好的方法来执行此操作而不是使用for循环.

这里有人向我展示了这个小小的Linq技巧

int[] numContacts = new int[]{ 32, 48, 24, 12};
String[][] descriptions = numContacts.Select(c => new string[c]).ToArray();
Run Code Online (Sandbox Code Playgroud)

构建一个没有循环的锯齿状2D数组(确实如此,但是它隐藏了它们并使我的代码变得漂亮)并且我认为可能有一个很好的小技巧来完成我想要的上面.

c# linq arrays

-2
推荐指数
1
解决办法
93
查看次数

标签 统计

c# ×6

winforms ×2

arrays ×1

c ×1

casting ×1

date-arithmetic ×1

datetime ×1

java ×1

linq ×1

object ×1

richtextbox ×1

wndproc ×1