小编RSi*_*ara的帖子

我恢复修订时锁定每个循环的VBA

我想从文档中获取修改后的原始文本.我是这样做的:

Set wrdDoc = wrdApp.Documents.Open(fileName)

For each sent in wrdDoc.Sentences

    if sent.Revisions.Count >=0 then
        after=sent.text
        sent.Revisions.RejectAll 
        before=sent.text
        SaveRev(before,after)
    End if

next
Run Code Online (Sandbox Code Playgroud)

现在这样会很好,除了那些畸形的句子之外

这是一句话.这是另一个.

将以一种奇怪的方式解析.首先,会出现这样的一句:" 这是一句话. "然后这一句既有" 这是一句话.这是另一句话. "

当有修改时会发生什么?第一次迭代将恢复对第一个句子的修订,然后第二次迭代将不会"看到"该修订部分.

底线是,第一次迭代将获得第一个句子的两个版本,第二次迭代将只获得第一个句子的原始版本(同时从第二个句子获得两个版本).

让我澄清一下:

假设我有原版

我们从这句话开始.这句话.

它被修改为

我们以这句话结束了.还有这句话.

第一次迭代将导致

之前:我们从这句话开始.

之后:我们以这句话结束了.

但第二次迭代将有

之前:我们以这句话结束了.这句话.

之后:我们用这句话结束了.还有这句话.

好吧,我所做的是改变逻辑,撤消版本恢复:

Set wrdDoc = wrdApp.Documents.Open(fileName)

For each sent in wrdDoc.Sentences

    if sent.Revisions.Count >=0 then
        wrdDoc.Undo
        after=sent.text
        sent.Revisions.RejectAll 
        before=sent.text
        SaveRev(before,after)
    End if

next
Run Code Online (Sandbox Code Playgroud)

我喜欢这个,因为我最终得到了一个未经改动的文件(最后一句除外).

问题是,这样做会将宏放在一个特定句子的无限循环中.

我不知道每个人的机制,我不知道导致它挂起的原因.显然改变集合会搞乱循环,但我不明白为什么.

我可以将i = 0循环到wrdDoc.Sentences.Count,但我认为这会让我跳过句子的原因与我现在重复的一样,我不能冒险(即使我测试好了,我必须是确定它永远不会发生).

所以问题是(是):

  1. 任何人都可以帮我弄清楚为什么它会锁定句子,
  2. 有没有更好的方法呢?
  3. 我怎样才能解决它,同时确保不要跳过句子.

非常感谢你!

PS:我可以提供样本文件,让我知道是否需要(也许我做错了已经让某人清楚了,我必须制作样本,因为我无法分享我正在处理的文件).

- …

foreach vba word-vba revision-history

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

为什么 webpack 尝试解析我的 readme.md 文件

Webpack 抛出如下所示的错误。构建似乎有效,但是,是什么给出了?

./{snip}/readme.md 中的警告模块解析失败:C:{snip}\readme.md Unexpected token (1:7) 您可能需要适当的加载程序来处理此文件类型。

我找不到任何忽略文件的方法。我什至不知道它为什么要渲染这些文件。

以下是我的 webpack 设置文件的一些部分:

module: {
    loaders: [
        {test: /\.hb.html$/, loader: "handlebars-loader/?helperDirs[]=" + __dirname + "/src/handlebarsHelpers"},
        { test: /\.tsx?$/, loader: "ts-loader?" + JSON.stringify({
            transpileOnly: true
        })}
    ]
},
Run Code Online (Sandbox Code Playgroud)

入口:

entry: "./src/entry.ts",
Run Code Online (Sandbox Code Playgroud)

resolve: {
    extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js"],
Run Code Online (Sandbox Code Playgroud)

我尝试在打字稿配置文件中排除 .md 文件,也没有奏效。

javascript typescript webpack

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

将clearInterval停止排队间隔执行

假设我有这些

myInterval=setInterval(funcA,50);

function funcA(){
  //Some code that takes longer than 50ms to run
}

setTimeout(function(){clearInterval(myInterval);},10000}
Run Code Online (Sandbox Code Playgroud)

假设funcA总是花费超过50ms来简化它.当然,许多funcA运行会堆积起来并排队.clearInterval会删除那些排队的运行还是只是停止排队新运行

我确实做了一个小提琴来测试它,结果发现clearInterval会停止所有未来的执行,即使是已经排队的那些.我只需要确认这种行为是一致的(跨浏览器/平台).

var myInterval=setInterval(funcA,20);

setTimeout(function(){
  clearInterval(myInterval);
  
  console.log('Clearing interval at ' + Date.now());
  
},400);

var lastRunTimeStamp=0;

function funcA(){
  while(Date.now()<lastRunTimeStamp+25){}
  lastRunTimeStamp=Date.now();
  console.log('Run at ' + lastRunTimeStamp);
}
Run Code Online (Sandbox Code Playgroud)

--Update--

此问题中的排队执行假设不正确,请查看TJ Crowder的答案以获得解释.

javascript clearinterval

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

如何将业务逻辑封装在业务实体上?

在 3 层应用程序中,我使用我的业务实体dbSets在我的dbContext.

在业务层:

public class User
{ 
   string name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在数据层:

public context:DbContext
{
  public DbSet<User> Users {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

那么我的问题是如何封装实体上的逻辑?我可以使用扩展方法,但我还想要一些属性,并且我不希望它们泄漏到域层之外。

c# entity-framework 3-tier

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

移动控件时停止滚动表单

我有一个自动滚动的表单,并且表单中有一个用户可编辑的区域。用户可以调整大小或移动控件。

移动控件时,如果将它们移到窗体的客户区之外,则会显示滚动条。这是我的意图。

现在,表单将自动向下滚动,因此当用户不释放鼠标时,控件将继续向下移动。这显然不是故意的。

我曾尝试在移动(或调整大小)开始时禁用自动滚动,但效果不佳......如果控件超出了表单的客户端,则一旦移动开始,它就会向上(或向左)移动。

移动子控件时锁定滚动条的方法是什么?

---编辑:示例代码---

只是一个关于移动控件的例子。

//Start moving if the button is clicked on
public void Button1_OnMouseDown()
{
   _moving=true;

}


//If the button was clicked on, move it to mouse position
public void OnMouseMove(object sender, MouseEventArgs e)
{
     if(_moving)
         Button1.Location=new Poiny(e.X, e.Y);
}
Run Code Online (Sandbox Code Playgroud)

当我移出窗体的边界时,滚动条出现并开始向下/向右滚动以适应控件......这反过来又移动控件,因为有鼠标移动事件,依此类推......

.net c# winforms

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