/// <summary> /// 按钮点击事件 /// </summary> /// <param name="sender">调用者</param> /// <param name="mp">坐标</param> /// <param name="button">按钮</param> /// <param name="click">点击次数</param> /// <param name="delta">滚轮滚动值</param> private void clickButton(object sender, FCTouchInfo touchInfo) { if (touchInfo.m_firstTouch && touchInfo.m_clicks == 1) { FCView control = sender as FCView; String name = control.Name; if (name == "btnCancel") { close(); } else if (name == "btnOK") { FCTextBox txtName = getTextBox("txtName"); FCTextBox txtScript = getTextBox("txtScript"); List <IndicatorData> indicatorDatas = m_mainFrame.m_indicators; IndicatorData newIndicatorData = null; //判断是否重复 int indicatorDatasSize = indicatorDatas.Count; for (int i = 0; i < indicatorDatasSize; i++) { IndicatorData indicatorData = indicatorDatas[i]; if (indicatorData.m_name == txtName.Text) { if (m_isEdit) { newIndicatorData = indicatorData; } else { MessageBox.Show("该指标名称已经存在!", "提示"); return; } } } //添加指标 if (!m_isEdit) { newIndicatorData = new IndicatorData(); indicatorDatas.Add(newIndicatorData); } newIndicatorData.m_name = txtName.Text; newIndicatorData.m_script = txtScript.Text; String path = Application.StartupPath + "\\indicators.txt"; String content = JsonConvert.SerializeObject(indicatorDatas); FCFile.write(path, content); if (!m_isEdit) { m_mainFrame.addIndicator(newIndicatorData); } close(); Native.update(); Native.invalidate(); } else if (name == "lblDelete") { m_mainFrame.removeIndicator(m_indicatorData); close(); } } }
/// <summary> /// 添加指标 /// </summary> /// <param name="chart">股票控件</param> /// <param name="dataSource">数据源</param> /// <param name="text">文本</param> /// <param name="parameters">参数</param> public static FCScript createIndicator(FCChart chart, FCDataTable dataSource, String text, String parameters) { FCScript indicator = new FCScript(); indicator.DataSource = dataSource; indicator.Name = ""; //indicator.FullName = ""; if (dataSource != null) { indicator.setSourceField(KeyFields.CLOSE, KeyFields.CLOSE_INDEX); indicator.setSourceField(KeyFields.HIGH, KeyFields.HIGH_INDEX); indicator.setSourceField(KeyFields.LOW, KeyFields.LOW_INDEX); indicator.setSourceField(KeyFields.OPEN, KeyFields.OPEN_INDEX); indicator.setSourceField(KeyFields.VOL, KeyFields.VOL_INDEX); indicator.setSourceField(KeyFields.AMOUNT, KeyFields.AMOUNT_INDEX); indicator.setSourceField(KeyFields.CLOSE.Substring(0, 1), KeyFields.CLOSE_INDEX); indicator.setSourceField(KeyFields.HIGH.Substring(0, 1), KeyFields.HIGH_INDEX); indicator.setSourceField(KeyFields.LOW.Substring(0, 1), KeyFields.LOW_INDEX); indicator.setSourceField(KeyFields.OPEN.Substring(0, 1), KeyFields.OPEN_INDEX); indicator.setSourceField(KeyFields.VOL.Substring(0, 1), KeyFields.VOL_INDEX); indicator.setSourceField(KeyFields.AMOUNT.Substring(0, 1), KeyFields.AMOUNT_INDEX); } IndicatorData indicatorData = new IndicatorData(); indicatorData.m_parameters = parameters; indicatorData.m_script = text; indicator.Tag = indicatorData; String constValue = ""; if (parameters != null && parameters.Length > 0) { String[] strs = parameters.Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); int strsSize = strs.Length; for (int i = 0; i < strsSize; i++) { String str = strs[i]; String[] strs2 = str.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries); constValue += "const " + strs2[0] + ":" + strs2[3] + ";"; } } if (text != null && text.Length > 0) { indicator.Script = constValue + text; } return(indicator); }