c#中的重绘问题//TODO:

本文通过实例探讨了窗口重绘事件触发的条件及其表现。详细分析了在不同操作下(如按钮点击、窗口覆盖等)重绘事件的具体行为,并尝试解释了为何某些情况下窗口内容无法正确更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


某窗口伪代码如下:


        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DRAW("Hello world!");//DRAW为伪代码
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Pen p = new Pen(new SolidBrush(Color.Green));

            using (Graphics g = Graphics.FromHwnd(this.Handle))
            {
                g.Clear(Color.White);
                g.DRAW("Btn1Click");
            }

        }


重绘事件Paint()发生的时机和具体情况比较抽象。


在界面刚显示的时候,屏幕上确实如实地出现了“Hello World",

在我点击button1的瞬间(MouseDown!),也会产生重绘事件。(MouseUp却不会)

而在button1_Click(){}中的绘画过程不会产生重绘。


点击btn1之后,屏幕如期显示白底黑字的"Btn1Click"。

这之后,当Form被其他窗口覆盖,再将覆盖窗口移开之后,会如期地产生重绘事件(设断点可以捕获到 e.Graphics.DRAW( "Hello world!" ); ),但是,却不会将"Hello World"画于窗口之上。(虽然这是好事,但我却想知道这是为什么)

之后将Form最小化再最大化 或 移将Form移出屏幕边界再移回 才会正常地显示出"Hello World"


初步怀疑是e.Graphics不同,具体细节看来还是等到明天翻查一下Windows程序设计找找答案。



To be continued.

.

<think>嗯,用户想了解如何在Pine Script中创建和使用自定义库及函数。首先,我需要回忆一下Pine Script的相关知识。Pine Script是TradingView的脚本语言,主要用于编写技术分析指标和策略。用户提到的库函数,应该是类似其他编程语言中的模块化功能,通过自定义库来复用代码。 根据Pine Script的文档,从v4版本开始支持用户自定义库。库函数的定义需要使用`library`关键字,然后通过`export`来暴露函数。例如,创建一个包含常用指标的库,然后在主脚本中导入使用。我需要确保示例代码正确,比如库文件的保存和导入路径是否正确。 然后,用户可能遇到的问题包括如何正确导出函数,路径引用错误,或者作用域的问题。比如,在导入库时需要使用正确的命名空间,函数是否需要参数类型声明,以及版本兼容性。Pine Script现在有v5版本,但库功能可能在v4之后就有了,需要确认语法是否适用。 另外,引用部分中的资料,比如引用[2]提到了tradingview-ta库的安装,但Pine Script本身是在TradingView平台内使用,不需要pip安装,所以可能需要澄清两者的区别。不过用户的问题明确提到Pine Script,所以应专注于该平台内的库创建和使用。 还需要考虑用户可能的实际应用场景,比如自定义技术指标、工具函数等。例如,用户可能希望将常用的计算函数封装成库,比如移动平均线、波动率计算等,然后在不同的策略中复使用,避免代码冗余。 最后,要确保示例代码符合Pine Script的语法规范,比如使用`//@version=5`来声明版本,正确使用`library`和`export`关键字,以及函数定义的格式。同时,指出常见错误,比如路径错误或作用域问题,帮助用户避免常见陷阱。</think>### Pine Script自定义库的创建与使用 在Pine Script中,自定义库的实现需要遵循特定的语法规则。以下是具体实现步骤: #### 一、创建自定义库 1. 新建脚本文件并声明库标识: ```pine //@version=5 library("MyCustomLib", overlay = false) export EMA_Calculation(float source, int length) => ta.ema(source, length) export RSI_Calculation(int length) => ta.rsi(close, length) ``` #### 二、导入库文件 1. 在主脚本中使用`import`语句引用: ```pine //@version=5 indicator("My Strategy") import "username/MyCustomLib/1" as MyLib emaValue = MyLib.EMA_Calculation(close, 20) rsiValue = MyLib.RSI_Calculation(14) plot(emaValue, color=color.blue) plot(rsiValue, color=color.red, style=plot.style_linebr) ``` #### 三、关键注意事项 1. **命名空间管理**:每个导入的库必须通过`as`指定别名[^2] 2. **参数类型声明**:函数参数必须明确指定`int`/`float`等类型 3. **版本兼容性**:库与主脚本需使用相同Pine Script版本(推荐v5) #### 四、错误排查示例 ```pine // 错误示例:缺少类型声明 export WrongFunc(source, length) => // 触发编译错误 ta.ema(source, length) // 正确写法 export CorrectFunc(float source, int length) => ta.ema(source, length) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值