纯HTML窗口


本示例可参考示例文件"CaseStudy\WebViewer\调用Foxtable对象.Table"的窗口"纯HTML窗口"。


这个筛选窗口之前我们用Foxtable做过,参考:
设计查询窗口

现在我们基于WebViewer来设计一个同样的:

首先我们要去掉窗口边框代码为:

e.Form.BaseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
'去掉窗口边框


剩下的就可以交给AI了吗,这是该窗口的AfterLoad事件代码,都是AI生成的:


'''Async
e.Form.BaseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
'去掉窗口边框
Dim
wv As WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
Dim ft As New FoxLib(wv) '创建Foxtable
wv.CoreWebView2.AddHostObjectToScript("ft", ft)  '注入Foxtable
Dim
html As String = <![CDATA[
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>
订单筛选窗口</title>
    <style>
        *{margin:0;padding:0;box-sizing:border-box;font-family:
微软雅黑;}
        /*
关键修改:让htmlbody充满整个窗口 */
        html, body{height:100%;width:100%;background:#fff;}
        /*
移除body的多余内边距,让容器直接贴边 */
        body{padding:0;}
        /*
关键修改:容器充满整个窗口,仅保留内边距 */
        .filter-container{width:100%;height:100%;background:#fff;padding:20px;
            position: relative;
        }
        .filter-title{font-size:16px;font-weight:bold;margin-bottom:20px;color:#333;border-bottom:1px solid #eee;padding-bottom:10px;}
        .form-row{display:flex;align-items:center;margin-bottom:15px;}
        .form-label{width:80px;text-align:right;margin-right:10px;color:#666;font-size:14px;}
        .form-control{flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:14px;}
        .radio-group{display:flex;gap:15px;margin-left:90px;}
        .radio-item{display:flex;align-items:center;gap:3px;color:#666;font-size:14px;}
        .button-group{display:flex;gap:10px;justify-content:center;margin-top:30px;}
        button{padding:8px 16px;border:none;border-radius:4px;background:#0078d7;color:#fff;cursor:pointer;font-size:14px;}
        button:hover{background:#005a9e;}
        .start-filter-btn{background:#28a745;}
        .start-filter-btn:hover{background:#218838;}
        .cancel-filter-btn{background:#dc3545;}
        .cancel-filter-btn:hover{background:#c82333;}
       
        /*
关闭按钮样式(X型) */
        .close-btn{position: absolute;top: 15px;right: 15px;width: 24px;height: 24px;
            border: none;background: transparent;cursor: pointer;padding: 0;
            display: flex;align-items: center;justify-content: center;
        }
        .close-btn::before, .close-btn::after{content: '';position: absolute;width: 2px;height: 18px;
            background-color: #999;transition: background-color 0.2s;
        }
        .close-btn::before{transform: rotate(45deg);}
        .close-btn::after{transform: rotate(-45deg);}
        .close-btn:hover::before, .close-btn:hover::after{background-color: #dc3545;}
    </style>
</head>
<body>
    <div class="filter-container">
        <button class="close-btn" onclick="closeForm()" title="
关闭窗口"></button>
        <div class="filter-title">
筛选</div>       
        <div class="form-row">
            <label class="form-label">
产品:</label>
            <select id="cmbProduct" class="form-control">
                <option value="">
请选择</option>
                <option value="PD01">PD01</option>
                <option value="PD02">PD02</option>
                <option value="PD03">PD03</option>
                <option value="PD04">PD04</option>
                <option value="PD05">PD05</option>
            </select>
        </div>
        <div class="form-row">
            <label class="form-label">
客户:</label>
            <select id="cmbCustomer" class="form-control">
                <option value="">
请选择</option>
                <option value="CS01">CS01</option>
                <option value="CS02">CS02</option>
                <option value="CS03">CS03</option>
                <option value="CS04">CS04</option>
                <option value="CS05">CS05</option>
            </select>
        </div>
        <div class="form-row">
            <label class="form-label">
雇员:</label>
            <select id="cmbEmployee" class="form-control">
                <option value="">
请选择</option>
                <option value="EP01">EP01</option>
                <option value="EP02">EP02</option>
                <option value="EP03">EP03</option>
                <option value="EP04">EP04</option>
                <option value="EP05">EP05</option>
            </select>
        </div>
        <div class="form-row">
            <label class="form-label">
起始日期:</label>
            <input type="date" id="StartDate" class="form-control">
        </div>
        <div class="form-row">
            <label class="form-label">
结束日期:</label>
            <input type="date" id="EndDate" class="form-control">
        </div>
        <div class="form-row">
            <label class="form-label">
付款状态:</label>
            <div class="radio-group">
                <div class="radio-item">
                    <input type="radio" id="rdoAll" name="paymentStatus" checked>
                    <label for="rdoAll">
全部</label>
                </div>
                <div class="radio-item">
                    <input type="radio" id="rdoYifu" name="paymentStatus">
                    <label for="rdoYifu">
已付</label>
                </div>
                <div class="radio-item">
                    <input type="radio" id="rdoWeifu" name="paymentStatus">
                    <label for="rdoWeifu">
未付</label>
                </div>
            </div>
        </div>
        <div class="button-group">
            <button class="start-filter-btn" onclick="startFilter()">
开始筛选</button>
            <button class="cancel-filter-btn" onclick="cancelFilter()">
撤销筛选</button>
            <button onclick="clearConditions()">
清除条件</button>
        </div>
    </div>
    <script>
        const ft = window.chrome.webview.hostObjects.sync.ft;
        function closeForm() {
            ft.Forms["
纯HTML窗口"].CloseAsync();
        }
        function clearConditions() {
            document.getElementById("cmbProduct").value = "";
            document.getElementById("cmbCustomer").value = "";
            document.getElementById("cmbEmployee").value = "";
            document.getElementById("StartDate").value = "";
            document.getElementById("EndDate").value = "";
            document.getElementById("rdoAll").checked = true;
        }
        function cancelFilter() {
            ft.Tables["
订单"].ApplyFilter = false;
        }
        function startFilter() {
            let filter = "";
            const cmbProduct = document.getElementById("cmbProduct");
            const cmbCustomer = document.getElementById("cmbCustomer");
            const cmbEmployee = document.getElementById("cmbEmployee");
            const StartDate = document.getElementById("StartDate");
            const EndDate = document.getElementById("EndDate");
            const rdoYifu = document.getElementById("rdoYifu");
            const rdoWeifu = document.getElementById("rdoWeifu");
            if (cmbProduct.value) {
                filter = `
产品 = '${cmbProduct.value}'`;
            }
            if (cmbCustomer.value) {
                filter = filter ? `${filter} And ` : "";
                filter += `
客户 = '${cmbCustomer.value}'`;
            }
            if (cmbEmployee.value) {
                filter = filter ? `${filter} And ` : "";
                filter += `
雇员 = '${cmbEmployee.value}'`;
            }
            if (StartDate.value) {
                filter = filter ? `${filter} And ` : "";
                filter += `
日期 >= #${StartDate.value}#`;
            }
            if (EndDate.value) {
                filter = filter ? `${filter} And ` : "";
                filter += `
日期 <= #${EndDate.value}#`;
            }
            if (rdoYifu.checked) {
                filter = filter ? `${filter} And ` : "";
                filter += "
已付款 = True";
            } else if (rdoWeifu.checked) {
                filter = filter ? `${filter} And ` : "";
                filter += "
已付款 = False Or 已付款 Is Null";
            }
            if (filter) {
                ft.Tables["
订单"].Filter = filter;
            }
        }
    </script>
</body>
</html>
]]>
.Value
wv.NavigateToString(html)

 


本页地址:http://www.foxtable.com/webhelp/topics/6343.htm